這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹Python數(shù)據(jù)庫(kù)API是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到周至網(wǎng)站設(shè)計(jì)與周至網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋周至地區(qū)。
雖然 Python 需要為操作不同的數(shù)據(jù)庫(kù)使用不同的模塊,但不同的數(shù)據(jù)庫(kù)模塊并非沒有規(guī)律可循,因?yàn)樗鼈兓径甲袷?Python 制訂的 DB API 協(xié)議,目前該協(xié)議的最新版本是 2.0,因此這些數(shù)據(jù)庫(kù)模塊有很多操作其實(shí)都是相同的。下面先介紹不同數(shù)據(jù)庫(kù)模塊之間的通用內(nèi)容。
全局變量
Python 推薦支持 DB API 2.0 的數(shù)據(jù)庫(kù)模塊都應(yīng)該提供如下 3 個(gè)全局變量:
apilevel:該全局變量顯示數(shù)據(jù)庫(kù)模塊的 API 版本號(hào)。對(duì)于支持 DB API 2.0 版本的數(shù)據(jù)庫(kù)模塊來(lái)說(shuō),該變量值通常就是 2.0。如果這個(gè)變量不存在,則可能該數(shù)據(jù)庫(kù)模塊暫時(shí)不支持 DB API 2.0。讀者應(yīng)該考慮選擇使用支持該數(shù)據(jù)庫(kù)的其他數(shù)據(jù)庫(kù)模塊。
threadsafety:該全局變量指定數(shù)據(jù)庫(kù)模塊的線程安全等級(jí),該等級(jí)值為 0~3 ,其中 3 代表該模塊完全是線程安全的;1 表示該模塊具有部分線程安全性,線程可以共享該模塊,但不能共享連接;0 則表示線程完全不能共享該模塊。
paramstyle:該全局變量指定當(dāng) SQL 語(yǔ)句需要參數(shù)時(shí),可以使用哪種風(fēng)格的參數(shù)。該變量可能返回如下變量值:
format:表示在 SQL 語(yǔ)句中使用 Python 標(biāo)準(zhǔn)的格式化字符串代表參數(shù)。例如,在程序中需要參數(shù)的地方使用 %s,接下來(lái)程序即可為這些參數(shù)指定參數(shù)值。
pyformat:表示在 SQL 語(yǔ)句中使用擴(kuò)展的格式代碼代表參數(shù)。比如使用 %(name),這樣即可使用包含 key 為 name 的字典為該參數(shù)指定參數(shù)值。
qmark:表示在 SQL 語(yǔ)句中使用問(wèn)號(hào)(?)代表參數(shù)。在 SQL 語(yǔ)句中有幾個(gè)參數(shù),全部用問(wèn)號(hào)代替。
numeric:表示在 SQL 語(yǔ)句中使用數(shù)字占位符(:N)代表參數(shù)。例如:1 代表一個(gè)參數(shù),:2 也表示一個(gè)參數(shù),這些數(shù)字相當(dāng)于參數(shù)名,因此它們不一定需要連續(xù)。
named:表示在 SQL 語(yǔ)句中使用命名占位符(:name)代表參數(shù)。例如 :name 代表一個(gè)參數(shù),:age 也表示一個(gè)參數(shù)。
通過(guò)查閱這些全局變量,即可大致了解該數(shù)據(jù)庫(kù) API 模塊的對(duì)外的編程風(fēng)格,至于該模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),完全由該模塊實(shí)現(xiàn)者負(fù)責(zé)提供,通常不需要開發(fā)者關(guān)心。
數(shù)據(jù)庫(kù) API 的核心類
遵守 DB API 2.0 協(xié)議的數(shù)據(jù)庫(kù)模塊通常會(huì)提供一個(gè) connect() 函數(shù),該函數(shù)用于連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)庫(kù)連接對(duì)象。
數(shù)據(jù)庫(kù)連接對(duì)象通常會(huì)具有如下方法和屬性:
cursor(factory=Cursor):打開游標(biāo)。
commit():提交事務(wù)。
rollback():回滾事務(wù)。
close():關(guān)閉數(shù)據(jù)庫(kù)連接。
isolation_level:返回或設(shè)置數(shù)據(jù)庫(kù)連接中事務(wù)的隔離級(jí)別。
in_transaction:判斷當(dāng)前是否處于事務(wù)中。
上面第一個(gè)方法可以返回一個(gè)游標(biāo)對(duì)象,游標(biāo)對(duì)象是 Python DB API 的核心對(duì)象,該對(duì)象主要用于執(zhí)行各種 SQL 語(yǔ)句,包括 DDL、DML、select 查詢語(yǔ)句等。使用游標(biāo)執(zhí)行不同的 SQL 語(yǔ)句返回不同的數(shù)據(jù)。
游標(biāo)對(duì)象通常會(huì)具有如下方法和屬性:
execute(sql[, parameters]):執(zhí)行 SQL 語(yǔ)句。parameters 參數(shù)用于為 SQL 語(yǔ)句中的參數(shù)指定值。
executemany(sql, seq_of_parameters):重復(fù)執(zhí)行 SQL 語(yǔ)句。可以通過(guò) seq_of_parameters 序列為 SQL 語(yǔ)句中的參數(shù)指定值,該序列有多少個(gè)元素,SQL 語(yǔ)句被執(zhí)行多少次。
executescript(sql_script):這不是 DB API 2.0 的標(biāo)準(zhǔn)方法。該方法可以直接執(zhí)行包含多條 SQL 語(yǔ)句的 SQL 腳本。
fetchone():獲取查詢結(jié)果集的下一行。如果沒有下一行,則返回 None。
fetchmany(size=cursor.arraysize):返回查詢結(jié)果集的下 N 行組成的列表。如果沒有更多的數(shù)據(jù)行,則返回空列表。
fetchall():返回查詢結(jié)果集的全部行組成的列表。
close():關(guān)閉游標(biāo)。
rowcount:該只讀屬性返回受 SQL 語(yǔ)句影響的行數(shù)。對(duì)于 executemany() 方法,該方法所修改的記錄條數(shù)也可通過(guò)該屬性獲取。
lastrowid:該只讀屬性可獲取最后修改行的 rowid。
arraysize:用于設(shè)置或獲取 fetchmany() 默認(rèn)獲取的記錄條數(shù),該屬性默認(rèn)為 1。有些數(shù)據(jù)庫(kù)模塊沒有該屬性。
description:該只讀屬性可獲取最后一次查詢返回的所有列的信息。
connection:該只讀屬性返回創(chuàng)建游標(biāo)的數(shù)據(jù)庫(kù)連接對(duì)象。有些數(shù)據(jù)庫(kù)模塊沒有該屬性。
總結(jié)來(lái)看,Python 的 DB API 2.0 由一個(gè) connect() 開始,一共涉及數(shù)據(jù)庫(kù)連接和游標(biāo)兩個(gè)核心 API。它們的分工如下:
數(shù)據(jù)庫(kù)連接:用于獲取游標(biāo)、控制事務(wù)。
游標(biāo):執(zhí)行各種 SQL 語(yǔ)句。
掌握了上面這些 API 之后,接下來(lái)可以大致歸納出 Python DB API 2.0 的編程步驟。
操作數(shù)據(jù)庫(kù)的基本流程
使用 Python DB API 2.0 操作數(shù)據(jù)庫(kù)的基本流程如下:
調(diào)用 connect() 方法打開數(shù)據(jù)庫(kù)連接,該方法返回?cái)?shù)據(jù)庫(kù)連接對(duì)象。
通過(guò)數(shù)據(jù)庫(kù)連接對(duì)象打開游標(biāo)。
使用游標(biāo)執(zhí)行 SQL 語(yǔ)句(包括 DDL、DML、select 查詢語(yǔ)句等)。如果執(zhí)行的是查詢語(yǔ)句,則處理查詢數(shù)據(jù)。
關(guān)閉游標(biāo)。
關(guān)閉數(shù)據(jù)庫(kù)連接。
下圖顯示了使用 Python DB API 2.0 操作數(shù)據(jù)庫(kù)的基本流程。
關(guān)于Python數(shù)據(jù)庫(kù)API是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。