Python中有沒有操作Oracle、Mysql、Sqlite的通用方法或者第三方庫?有什麼推薦?

一葉知秋丿


對於操作Oracle、Mysql、Sqlite等多種關係型數據庫,推薦使用 Python Records模塊 ,其適用於絕大多數關係型數據庫的原始SQL操作,同時支持將查詢結果導出到xlsx, xls, csv, json, yaml, pandas, html等文件中,強無敵!


我們在開發過程中經常會涉及與數據庫進行交互,比如題目中提到的MySQL、Oracle、PostgreSQL、Sqlite關係型數據庫。較以往,我們會選擇其對應的Python 第三方模塊,實現相關數據庫的增刪改查等操作,不同數據庫對應的Python模塊如下:

  • Oracle數據庫: cx_Oracle
  • MySQL數據庫:mysql-connector,pymysql
  • PostgreSQL數據庫:psycopg2
  • SQLite數據庫: sqlite3

就像,問題到提到的那樣,當同一程序中需要操作不同的數據庫時,有沒有一種通用的方式或者模塊,可以實現不同數據的各種操作呢?否則,我們將不得不面臨一個問題,當代碼中涉及不同數據庫操作時,容易出現代碼冗餘、不規範,風格不統一等等問題。


那麼究竟有沒有一種通用而優雅的支持各種數據庫操作的庫呢?答案是肯定,SQLAlchemy庫。

後來接觸到 Python SQLAlchemy(ORM框架),其一定程度上解決了各數據庫的SQL差異,可是 SQLAlchemy 在消除不同數據庫間SQL差異的同時,引入了各框架CRUD的差異。可開發人員往往是具備一定的SQL基礎。假如一個框架強制用戶只能使用它規定的CRUD形式,那反而增加用戶的學習成本,導致學習曲線增長。


當然你也可以嘗試SQLAlchemy,那麼除了SQLAlchemy 我們還有其他選擇嗎?



遇見 Records

Records 是一個使用簡單且功能非常強大的庫,適用於絕大多數關係型數據庫的 原始SQL操作。強無敵!

Records 有哪些特點呢,如下:

  • 其基於 SQLAlchemy 與 Tablib 開發。
  • 使用簡單且統一。
  • 支持緩存查詢的數據。
  • 無需關注數據連接狀態,自動實現上下文管理器。
  • 支持數據庫事務,能夠保持數據的原子性和一致性。
  • 支持安全的參數化查詢,防止 因SQL語句不規範而導致安全問題發生。
  • 支持主流數據庫,如 Oracle, MySQL,Postgres,SQLite等關係型數據庫。

御劍 Records

接下來,我們在Windows 10的Python3環境中,使用pip方式進行安裝Records,命令如下:

pip install records

安裝過程非常簡單,如下:


接下來,我們以SQLite數據庫為例,介紹如何使用 Records 進行數據庫CRUD操作。


關於不同數據庫的統一連接方式,如下:

Records 基於 SQLAlchemy 實現的,因此數據庫的統一連接方式與SQLAlchemy 相同,如下

Records 操作各種數據的步驟也非常簡單,如下:


  1. 連接數據庫,獲取數據庫對象。
  2. 使用數據庫對象的 query 方法執行增刪改查SQL 語句。
  3. 根據開發需求,使用 all方法獲取查詢結果進行處理。

說了這麼多,接下來,讓我們瞭解下如何使用Records 完成數據庫的增刪改查等操作。


創建表


數據寫入

Records 支持安全的參數化,我們可以使用 :variable 定義變量,然後通過傳入參數完成動態傳值,對於需要動態加載數據的場景來說非常的高效,如批量入庫操作。



數據批量寫入

我們使用SQL 語句實現數據批量入庫時,操作比較冗餘, Records 模塊提供了 bulk_query 方法能夠非常簡潔的插入數據和更新數據,如下。


數據查詢

我們可以通過 all 方法獲取執行SQL所返回的全部記錄,first 方法是獲取第一條記錄。


字段獲取

我們可以像操作字典那樣,直接獲取對應字段的查詢結果,如下:

執行上述代碼,輸出結果如下:


數據導出

我們可以將查詢的結果直接導出到xlsx當中,如下:

執行上述代碼,實現數據庫查詢結果的導出到xlsx中,如下:

數據導出為yaml

我們也可以將查詢結果直接導出到yaml文件中,如下:

此外,還支持導出為xls, csv, json,pandas, html 等多種數據格式。

軟件測試開發技術棧


當然是有的,這裡推薦一個第三方庫—SQLAlchemy,一個著名的Python ORM框架,基於對象關係模型對數據庫進行操作(增刪改查等),支持目前主流的關係型數據庫,包括Oracle、Mysql、Sqlite等,感興趣的朋友可以嘗試一下:

01

安裝SQLAlchemy

這個非常簡單,打開cmd窗口,直接輸入命令“pip install sqlalchemy”即可,程序會自動檢測相關依賴包並進行安裝:

02

操作MySQL數據庫

安裝完成後,我們就可以直接使用SQLAlchemy框架操作MySQL數據庫了(這裡需要下載pymysql模塊),測試代碼如下,以簡單的數據查詢為例,基本思想先創建一個數據庫連接,然後定義一個對象類(對應需要操作的數據表),最後再執行相關查詢即可,這裡不需要編寫SQL語句,框架自帶有詳細的查詢函數,功能非常強大:


增刪改數據也非常容易,在上面數據庫連接的基礎上,直接調用相關修改函數就行,這裡需要注意的是,一定要進行commit提交,否則數據庫不會更新:

03

操作Oracle、SQLite數據庫

因為是基於ORM對象模型對數據庫進行操作,因此在數據表結構不變的情況下,只需修改數據庫連接的URL就行,其他代碼不需修改也能正常進行數據庫操作:

  • Oracle數據庫:依賴cx_oracle(需要單獨下載)

engine = create_engine('oracle://Username:Password@IP:Port/DBName')
  • SQLite數據庫:內置驅動,直接使用

engine = create_engine('sqlite:///SQLite數據庫路徑')

至此,我們就完成了利用SQLAlchemy操作Oracle、Mysql、Sqlite數據庫。總的來說,整個過程非常簡單,只要你熟悉一下使用過程,很快就能掌握的,官方也自帶有非常詳細的入門教程,非常適合初學者學習,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。


分享到:


相關文章: