您可以使用流行的編程語(yǔ)言 Python 來管理存儲(chǔ)在 MariaDB 平臺(tái)中的數(shù)據(jù),包括 MariaDB Server、MariaDB MaxScale 和 MariaDB SkySQL。以下是有關(guān)從 Python 連接到 MariaDB 平臺(tái)以檢索、更新和插入信息所需了解的所有信息。
準(zhǔn)備和安裝
您將需要訪問 MariaDB 服務(wù)器。我們推薦以下兩種方法之一:
1. 在您自己的硬件上下載 MariaDB 服務(wù)器。有關(guān)文檔中的分步說明,請(qǐng)參閱 部署指南。
2. 使用 MariaDB SkySQL 部署 MariaDB 平臺(tái),其中包括 MariaDB Enterprise Server。請(qǐng)參閱我們的文檔以在幾分鐘內(nèi)啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)。
如果您想嘗試 Python 與 MariaDB 的集成,但沒有可使用的數(shù)據(jù)庫(kù),則可以使用流行的員工示例數(shù)據(jù)庫(kù)。
MariaDB 通過 MariaDB Connector/Python 提供 Python 支持,可通過 Python Package Index 獲得。要安裝,請(qǐng)使用 PIP:
Shell:
$ pip3 install mariadb
連接到 MariaDB 服務(wù)器
1. 要使用 MariaDB Connector/Python 連接到 MariaDB 服務(wù)器,您必須先導(dǎo)入它,就像導(dǎo)入任何其他模塊一樣: import mariadb
2.接下來,使用connect()函數(shù)建立數(shù)據(jù)庫(kù)連接。該函數(shù)采用一系列命名參數(shù)來指定您的客戶端憑據(jù),例如用戶名、主機(jī)、密碼。如果您在 SkySQL 上使用數(shù)據(jù)庫(kù)實(shí)例,此信息將在您的數(shù)據(jù)庫(kù)實(shí)例的服務(wù)詳細(xì)信息頁(yè)面中提供。
該連接為您提供了一個(gè)界面,用于配置您的應(yīng)用程序與 MariaDB 服務(wù)器的連接。
3. 最后,調(diào)用cursor()連接上的方法來檢索游標(biāo)。
游標(biāo)為您提供了與服務(wù)器交互的界面,例如運(yùn)行 SQL 查詢和管理事務(wù)。
Python:
# Module Imports
import mariadb
import sys
# Connect to MariaDB Platform
try: conn = mariadb.connect(
user="db_user",
password="db_user_passwd",
host="192.0.2.1",
port=3306,
database="employees"
) except mariadb.Error as e:
print(f"Error connecting to MariaDB Platform: {e}")
sys.exit(1)
# Get Cursor
cur = conn.cursor()
檢索數(shù)據(jù)
有了初始代碼后,您就可以開始處理數(shù)據(jù)了。您應(yīng)該做的第一件事是嘗試從數(shù)據(jù)庫(kù)中檢索信息。以下是針對(duì)員工數(shù)據(jù)庫(kù)的查詢代碼:
Python:
cur.execute(
"SELECT first_name,last_name FROM employees WHERE first_name=?",
(some_name,))
MariaDB 連接器/Python 使用準(zhǔn)備好的語(yǔ)句,清理元組中的值并將其插入問號(hào) (?) 的位置。在處理用戶提供的信息時(shí),這比通過 f 字符串或格式說明符插入更安全。
查詢結(jié)果存儲(chǔ)在游標(biāo)對(duì)象的列表中。要查看結(jié)果,您可以在光標(biāo)上循環(huán)。
Python:
# Print Result-set
for (first_name, last_name) in cur:
print(f"First Name: {first_name}, Last Name: {last_name}")
每一行作為包含SELECT語(yǔ)句中列的元組從游標(biāo)傳遞。
添加數(shù)據(jù)
execute()對(duì)INSERT語(yǔ)句使用相同的方法,您可以向表中添加行。
Python:
cursor.execute(
"INSERT INTO employees (first_name,last_name) VALUES (?, ?)",
(first_name, last_name))
默認(rèn)情況下,MariaDB Connector/Python 啟用自動(dòng)提交。如果您想手動(dòng)管理您的事務(wù),僅在您準(zhǔn)備好時(shí)提交,您可以通過將autocommit連接上的屬性設(shè)置為 False來禁用它。
Python:
# Disable Auto-Commit
conn.autocommit = False
完成此操作后,您可以使用commit()和rollback()方法提交和回滾事務(wù)。MariaDB Server 允許您在使用 InnoDB 存儲(chǔ)引擎時(shí)在同一個(gè)表上運(yùn)行多個(gè)并發(fā)事務(wù)而無需鎖定它。
在插入行時(shí),您可能希望在生成最后插入的行時(shí)找到它的主鍵,就像自動(dòng)遞增的值一樣。您可以使用lastrowid()光標(biāo)上的方法檢索它。
更新和刪除行與插入行類似。唯一的區(qū)別在于所使用的查詢。
捕捉異常
對(duì)于您的任何 SQL 操作(查詢、更新、刪除或插入記錄),您都應(yīng)該嘗試捕獲錯(cuò)誤,以便您可以驗(yàn)證您的操作是否按預(yù)期執(zhí)行,并且您在出現(xiàn)任何問題時(shí)都知道。要捕獲錯(cuò)誤,請(qǐng)使用 Error 類:
Python:
try:
cursor.execute("some MariaDB query"))
except mariadb.Error as e:
print(f"Error: {e}")
如果try上述代碼的子句中的查詢失敗,MariaDB Server 會(huì)返回一個(gè) SQL 異常,該異常在except 中被捕獲并打印到 stdout。當(dāng)您使用數(shù)據(jù)庫(kù)時(shí),這種捕獲異常的編程最佳實(shí)踐尤其重要,因?yàn)槟枰_保信息的完整性。
完成對(duì)數(shù)據(jù)庫(kù)的使用后,請(qǐng)確保關(guān)閉此連接,以避免將未使用的連接保持打開狀態(tài),從而浪費(fèi)資源。您可以使用以下close()方法關(guān)閉連接:
Python:
# Close Connection
conn.close()
如果您使用 SkySQL 進(jìn)行試驗(yàn),您可能需要刪除您的數(shù)據(jù)庫(kù)服務(wù)以停止產(chǎn)生費(fèi)用。
完整的腳本
這就是將 Python 代碼連接到 MariaDB 數(shù)據(jù)庫(kù)是多么簡(jiǎn)單和直接。以下是完整得腳本的代碼:
Python:
#!/usr/bin/python
import mariadb
conn = mariadb.connect(
user="db_user",
password="db_user_passwd",
host="localhost",
database="employees"
)
cur = conn.cursor()
#retrieving information
some_name = "Georgi"
cur.execute("SELECT first_name,last_name FROM employees WHERE first_name=?", (some_name,))
for first_name, last_name in cur:
print(f"First name: {first_name}, Last name: {last_name}")
#insert information
try:
cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria","DB"))
except mariadb.Error as e:
print(f"Error: {e}")
conn.commit()
print(f"Last Inserted ID: {cur.lastrowid}")
conn.close()