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