{eval=Array;=+count(Array);}
對于操作Oracle、Mysql、Sqlite等多種關(guān)系型數(shù)據(jù)庫,推薦使用 Python Records模塊 ,其適用于絕大多數(shù)關(guān)系型數(shù)據(jù)庫的原始SQL操作,同時(shí)支持將查詢結(jié)果導(dǎo)出到xlsx, xls, csv, json, yaml, pandas, html等文件中,強(qiáng)無敵!
我們在開發(fā)過程中經(jīng)常會涉及與數(shù)據(jù)庫進(jìn)行交互,比如題目中提到的MySQL、Oracle、PostgreSQL、Sqlite關(guān)系型數(shù)據(jù)庫。較以往,我們會選擇其對應(yīng)的Python 第三方模塊,實(shí)現(xiàn)相關(guān)數(shù)據(jù)庫的增刪改查等操作,不同數(shù)據(jù)庫對應(yīng)的Python模塊如下:
就像,問題到提到的那樣,當(dāng)同一程序中需要操作不同的數(shù)據(jù)庫時(shí),有沒有一種通用的方式或者模塊,可以實(shí)現(xiàn)不同數(shù)據(jù)的各種操作呢?否則,我們將不得不面臨一個(gè)問題,當(dāng)代碼中涉及不同數(shù)據(jù)庫操作時(shí),容易出現(xiàn)代碼冗余、不規(guī)范,風(fēng)格不統(tǒng)一等等問題。
那么究竟有沒有一種通用而優(yōu)雅的支持各種數(shù)據(jù)庫操作的庫呢?答案是肯定,SQLAlchemy庫。
后來接觸到 Python SQLAlchemy(ORM框架),其一定程度上解決了各數(shù)據(jù)庫的SQL差異,可是 SQLAlchemy 在消除不同數(shù)據(jù)庫間SQL差異的同時(shí),引入了各框架CRUD的差異??砷_發(fā)人員往往是具備一定的SQL基礎(chǔ)。假如一個(gè)框架強(qiáng)制用戶只能使用它規(guī)定的CRUD形式,那反而增加用戶的學(xué)習(xí)成本,導(dǎo)致學(xué)習(xí)曲線增長。
當(dāng)然你也可以嘗試SQLAlchemy,那么除了SQLAlchemy 我們還有其他選擇嗎?
Records 是一個(gè)使用簡單且功能非常強(qiáng)大的庫,適用于絕大多數(shù)關(guān)系型數(shù)據(jù)庫的 原始SQL操作。強(qiáng)無敵!
Records 有哪些特點(diǎn)呢,如下:
接下來,我們在Windows 10的Python3環(huán)境中,使用pip方式進(jìn)行安裝Records,命令如下:
pip install records
安裝過程非常簡單,如下:
接下來,我們以SQLite數(shù)據(jù)庫為例,介紹如何使用 Records 進(jìn)行數(shù)據(jù)庫CRUD操作。
關(guān)于不同數(shù)據(jù)庫的統(tǒng)一連接方式,如下:
Records 基于 SQLAlchemy 實(shí)現(xiàn)的,因此數(shù)據(jù)庫的統(tǒng)一連接方式與SQLAlchemy 相同,如下
Records 操作各種數(shù)據(jù)的步驟也非常簡單,如下:
說了這么多,接下來,讓我們了解下如何使用Records 完成數(shù)據(jù)庫的增刪改查等操作。
Records 支持安全的參數(shù)化,我們可以使用 :variable 定義變量,然后通過傳入?yún)?shù)完成動態(tài)傳值,對于需要?jiǎng)討B(tài)加載數(shù)據(jù)的場景來說非常的高效,如批量入庫操作。
我們使用SQL 語句實(shí)現(xiàn)數(shù)據(jù)批量入庫時(shí),操作比較冗余, Records 模塊提供了 bulk_query 方法能夠非常簡潔的插入數(shù)據(jù)和更新數(shù)據(jù),如下。
我們可以通過 all 方法獲取執(zhí)行SQL所返回的全部記錄,first 方法是獲取第一條記錄。
字段獲取
我們可以像操作字典那樣,直接獲取對應(yīng)字段的查詢結(jié)果,如下:
執(zhí)行上述代碼,輸出結(jié)果如下:
我們可以將查詢的結(jié)果直接導(dǎo)出到xlsx當(dāng)中,如下:
數(shù)據(jù)導(dǎo)出為yaml
我們也可以將查詢結(jié)果直接導(dǎo)出到y(tǒng)aml文件中,如下:
此外,還支持導(dǎo)出為xls, csv, json,pandas, html 等多種數(shù)據(jù)格式。
0
回答0
回答10
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答