{eval=Array;=+count(Array);}

成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

問(wèn)答專(zhuān)欄Q & A COLUMN

Python中有沒(méi)有操作Oracle、Mysql、Sqlite的通用方法或者第三方庫(kù)?有什么推薦?

DobbyKimDobbyKim 回答0 收藏1
收藏問(wèn)題

1條回答

nodejh

nodejh

回答于2022-06-28 14:31

對(duì)于操作Oracle、Mysql、Sqlite等多種關(guān)系型數(shù)據(jù)庫(kù),推薦使用 Python Records模塊 ,其適用于絕大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)的原始SQL操作,同時(shí)支持將查詢結(jié)果導(dǎo)出到xlsx, xls, csv, json, yaml, pandas, html等文件中,強(qiáng)無(wú)敵!


我們?cè)陂_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)涉及與數(shù)據(jù)庫(kù)進(jìn)行交互,比如題目中提到的MySQL、Oracle、PostgreSQL、Sqlite關(guān)系型數(shù)據(jù)庫(kù)。較以往,我們會(huì)選擇其對(duì)應(yīng)的Python 第三方模塊,實(shí)現(xiàn)相關(guān)數(shù)據(jù)庫(kù)的增刪改查等操作,不同數(shù)據(jù)庫(kù)對(duì)應(yīng)的Python模塊如下:

  • Oracle數(shù)據(jù)庫(kù): cx_Oracle
  • MySQL數(shù)據(jù)庫(kù):mysql-connector,pymysql
  • PostgreSQL數(shù)據(jù)庫(kù):psycopg2
  • SQLite數(shù)據(jù)庫(kù): sqlite3

就像,問(wèn)題到提到的那樣,當(dāng)同一程序中需要操作不同的數(shù)據(jù)庫(kù)時(shí),有沒(méi)有一種通用的方式或者模塊,可以實(shí)現(xiàn)不同數(shù)據(jù)的各種操作呢?否則,我們將不得不面臨一個(gè)問(wèn)題,當(dāng)代碼中涉及不同數(shù)據(jù)庫(kù)操作時(shí),容易出現(xiàn)代碼冗余、不規(guī)范,風(fēng)格不統(tǒng)一等等問(wèn)題。


那么究竟有沒(méi)有一種通用而優(yōu)雅的支持各種數(shù)據(jù)庫(kù)操作的庫(kù)呢?答案是肯定,SQLAlchemy庫(kù)。

后來(lái)接觸到 Python SQLAlchemy(ORM框架),其一定程度上解決了各數(shù)據(jù)庫(kù)的SQL差異,可是 SQLAlchemy 在消除不同數(shù)據(jù)庫(kù)間SQL差異的同時(shí),引入了各框架CRUD的差異。可開(kāi)發(fā)人員往往是具備一定的SQL基礎(chǔ)。假如一個(gè)框架強(qiáng)制用戶只能使用它規(guī)定的CRUD形式,那反而增加用戶的學(xué)習(xí)成本,導(dǎo)致學(xué)習(xí)曲線增長(zhǎng)。


當(dāng)然你也可以嘗試SQLAlchemy,那么除了SQLAlchemy 我們還有其他選擇嗎?



遇見(jiàn) Records

Records 是一個(gè)使用簡(jiǎn)單且功能非常強(qiáng)大的庫(kù),適用于絕大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)的 原始SQL操作。強(qiáng)無(wú)敵!

Records 有哪些特點(diǎn)呢,如下:

  • 其基于 SQLAlchemy 與 Tablib 開(kāi)發(fā)。
  • 使用簡(jiǎn)單且統(tǒng)一。
  • 支持緩存查詢的數(shù)據(jù)。
  • 無(wú)需關(guān)注數(shù)據(jù)連接狀態(tài),自動(dòng)實(shí)現(xiàn)上下文管理器。
  • 支持?jǐn)?shù)據(jù)庫(kù)事務(wù),能夠保持?jǐn)?shù)據(jù)的原子性和一致性。
  • 支持安全的參數(shù)化查詢,防止 因SQL語(yǔ)句不規(guī)范而導(dǎo)致安全問(wèn)題發(fā)生。
  • 支持主流數(shù)據(jù)庫(kù),如 Oracle, MySQL,Postgres,SQLite等關(guān)系型數(shù)據(jù)庫(kù)。

御劍 Records

接下來(lái),我們?cè)赪indows 10的Python3環(huán)境中,使用pip方式進(jìn)行安裝Records,命令如下:

pip install records

安裝過(guò)程非常簡(jiǎn)單,如下:


接下來(lái),我們以SQLite數(shù)據(jù)庫(kù)為例,介紹如何使用 Records 進(jìn)行數(shù)據(jù)庫(kù)CRUD操作。


關(guān)于不同數(shù)據(jù)庫(kù)的統(tǒng)一連接方式,如下:

Records 基于 SQLAlchemy 實(shí)現(xiàn)的,因此數(shù)據(jù)庫(kù)的統(tǒng)一連接方式與SQLAlchemy 相同,如下

Records 操作各種數(shù)據(jù)的步驟也非常簡(jiǎn)單,如下:

  1. 連接數(shù)據(jù)庫(kù),獲取數(shù)據(jù)庫(kù)對(duì)象。
  2. 使用數(shù)據(jù)庫(kù)對(duì)象的 query 方法執(zhí)行增刪改查SQL 語(yǔ)句。
  3. 根據(jù)開(kāi)發(fā)需求,使用 all方法獲取查詢結(jié)果進(jìn)行處理。

說(shuō)了這么多,接下來(lái),讓我們了解下如何使用Records 完成數(shù)據(jù)庫(kù)的增刪改查等操作。


創(chuàng)建表


數(shù)據(jù)寫(xiě)入

Records 支持安全的參數(shù)化,我們可以使用 :variable 定義變量,然后通過(guò)傳入?yún)?shù)完成動(dòng)態(tài)傳值,對(duì)于需要?jiǎng)討B(tài)加載數(shù)據(jù)的場(chǎng)景來(lái)說(shuō)非常的高效,如批量入庫(kù)操作。



數(shù)據(jù)批量寫(xiě)入

我們使用SQL 語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)批量入庫(kù)時(shí),操作比較冗余, Records 模塊提供了 bulk_query 方法能夠非常簡(jiǎn)潔的插入數(shù)據(jù)和更新數(shù)據(jù),如下。


數(shù)據(jù)查詢

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


字段獲取

我們可以像操作字典那樣,直接獲取對(duì)應(yīng)字段的查詢結(jié)果,如下:

執(zhí)行上述代碼,輸出結(jié)果如下:


數(shù)據(jù)導(dǎo)出

我們可以將查詢的結(jié)果直接導(dǎo)出到xlsx當(dāng)中,如下:

執(zhí)行上述代碼,實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢結(jié)果的導(dǎo)出到xlsx中,如下:

數(shù)據(jù)導(dǎo)出為yaml

我們也可以將查詢結(jié)果直接導(dǎo)出到y(tǒng)aml文件中,如下:

此外,還支持導(dǎo)出為xls, csv, json,pandas, html 等多種數(shù)據(jù)格式。

評(píng)論0 贊同0
  •  加載中...

相關(guān)問(wèn)題

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

  • 擅長(zhǎng)該話題
  • 回答過(guò)該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說(shuō)句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<