App下載

在開(kāi)發(fā)中要如何將Python程序連接到MariaDB?將Python程序連接到 MariaDB方法分享!

叼著奶瓶去逛gai 2021-09-18 17:47:06 瀏覽數(shù) (4807)
反饋

您可以使用流行的編程語(yǔ)言 Python 來(lái)管理存儲(chǔ)在 MariaDB 平臺(tái)中的數(shù)據(jù),包括 MariaDB Server、MariaDB MaxScale 和 MariaDB SkySQL。以下是有關(guān)從 Python 連接到 MariaDB 平臺(tái)以檢索、更新和插入信息所需了解的所有信息。

準(zhǔn)備和安裝

您將需要訪問(wèn) MariaDB 服務(wù)器。我們推薦以下兩種方法之一:

1. 在您自己的硬件上下載 MariaDB 服務(wù)器。有關(guān)文檔中的分步說(shuō)明,請(qǐng)參閱 部署指南

2. 使用 MariaDB SkySQL 部署 MariaDB 平臺(tái),其中包括 MariaDB Enterprise Server。請(qǐng)參閱我們的文檔以在幾分鐘內(nèi)啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)。

如果您想嘗試 Python 與 MariaDB 的集成,但沒(méi)有可使用的數(shù)據(jù)庫(kù),則可以使用流行的員工示例數(shù)據(jù)庫(kù)

MariaDB 通過(guò) MariaDB Connector/Python 提供 Python 支持,可通過(guò) 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.接下來(lái),使用connect()函數(shù)建立數(shù)據(jù)庫(kù)連接。該函數(shù)采用一系列命名參數(shù)來(lái)指定您的客戶端憑據(jù),例如用戶名、主機(jī)、密碼。如果您在 SkySQL 上使用數(shù)據(jù)庫(kù)實(shí)例,此信息將在您的數(shù)據(jù)庫(kù)實(shí)例的服務(wù)詳細(xì)信息頁(yè)面中提供。

該連接為您提供了一個(gè)界面,用于配置您的應(yīng)用程序與 MariaDB 服務(wù)器的連接。

3. 最后,調(diào)用cursor()連接上的方法來(lái)檢索游標(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ù)

有了初始代碼后,您就可以開(kāi)始處理數(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ǔ)句,清理元組中的值并將其插入問(wèn)號(hào) (?) 的位置。在處理用戶提供的信息時(shí),這比通過(guò) f 字符串或格式說(shuō)明符插入更安全。

查詢結(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í)提交,您可以通過(guò)將autocommit連接上的屬性設(shè)置為 False來(lái)禁用它。

Python:

# Disable Auto-Commit
conn.autocommit = False

完成此操作后,您可以使用commit()和rollback()方法提交和回滾事務(wù)。MariaDB Server 允許您在使用 InnoDB 存儲(chǔ)引擎時(shí)在同一個(gè)表上運(yùn)行多個(gè)并發(fā)事務(wù)而無(wú)需鎖定它。

在插入行時(shí),您可能希望在生成最后插入的行時(shí)找到它的主鍵,就像自動(dòng)遞增的值一樣。您可以使用lastrowid()光標(biāo)上的方法檢索它。

更新和刪除行與插入行類似。唯一的區(qū)別在于所使用的查詢。

捕捉異常

對(duì)于您的任何 SQL 操作(查詢、更新、刪除或插入記錄),您都應(yīng)該嘗試捕獲錯(cuò)誤,以便您可以驗(yàn)證您的操作是否按預(yù)期執(zhí)行,并且您在出現(xiàn)任何問(wè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)閉此連接,以避免將未使用的連接保持打開(kāi)狀態(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()


0 人點(diǎn)贊