一葉知秋丿
對於操作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 操作各種數據的步驟也非常簡單,如下:
- 連接數據庫,獲取數據庫對象。
- 使用數據庫對象的 query 方法執行增刪改查SQL 語句。
- 根據開發需求,使用 all方法獲取查詢結果進行處理。
說了這麼多,接下來,讓我們瞭解下如何使用Records 完成數據庫的增刪改查等操作。
創建表
數據寫入
Records 支持安全的參數化,我們可以使用 :variable 定義變量,然後通過傳入參數完成動態傳值,對於需要動態加載數據的場景來說非常的高效,如批量入庫操作。
數據批量寫入
我們使用SQL 語句實現數據批量入庫時,操作比較冗餘, Records 模塊提供了 bulk_query 方法能夠非常簡潔的插入數據和更新數據,如下。
數據查詢
我們可以通過 all 方法獲取執行SQL所返回的全部記錄,first 方法是獲取第一條記錄。
字段獲取
我們可以像操作字典那樣,直接獲取對應字段的查詢結果,如下:
數據導出
我們可以將查詢的結果直接導出到xlsx當中,如下:
數據導出為yaml
我們也可以將查詢結果直接導出到yaml文件中,如下:
軟件測試開發技術棧
當然是有的,這裡推薦一個第三方庫—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(需要單獨下載)
SQLite數據庫:內置驅動,直接使用
至此,我們就完成了利用SQLAlchemy操作Oracle、Mysql、Sqlite數據庫。總的來說,整個過程非常簡單,只要你熟悉一下使用過程,很快就能掌握的,官方也自帶有非常詳細的入門教程,非常適合初學者學習,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。