????????大家好,當涉及到與數據庫進行交互和操作時,Python的pymysql
庫是一個常用且功能強大的選擇。pymysql
提供了與MySQL數據庫的連接、查詢、插入、更新和刪除等操作的方法,使得在Python中進行數據庫操作變得簡單而高效。
1、安裝?pymysql
?庫
在開始之前,確保已經安裝了?pymysql
?庫。可以使用以下命令通過 pip 進行安裝:
pip install pymysql
2、連接數據庫
????????首先,我們需要建立與數據庫的連接。使用?pymysql
?的?connect()
?函數來創建一個數據庫連接對象,該函數接受數據庫的連接參數,例如主機名、用戶名、密碼、數據庫名等。以下是一個建立與 MySQL 數據庫的連接的示例:
import pymysql# 建立數據庫連接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)
????????在上述示例中,我們通過傳遞數據庫的連接參數來建立與數據庫的連接。根據實際情況,您需要將?host
、user
、password
?和?database
?替換為相應的值。
3、創建游標對象
????????在建立數據庫連接后,我們需要創建一個游標對象來執行 SQL 語句和操作數據庫。游標對象允許我們執行查詢、插入、更新或刪除等數據庫操作。
# 創建游標對象
cursor = connection.cursor()
4、執行 SQL 查詢
????????使用游標對象,我們可以執行 SQL 查詢并獲取結果。pymysql
?提供了多個方法來執行查詢,其中最常用的是?execute()
?和?fetchone()
、fetchall()
?方法。
execute()
?方法用于執行 SQL 查詢,可以接受帶有占位符的參數。fetchone()
?方法用于獲取查詢結果的下一行數據。fetchall()
?方法用于獲取查詢結果的所有行數據。
以下是一個執行查詢并獲取結果的示例:
# 執行查詢
cursor.execute('SELECT * FROM table_name')# 獲取查詢結果的所有行數據
rows = cursor.fetchall()# 遍歷結果
for row in rows:print(row)
????????在上述示例中,我們執行了一個簡單的查詢語句,并使用?fetchall()
?方法獲取查詢結果的所有行數據。然后,我們遍歷每一行數據并將其打印出來。
5、執行 SQL 插入、更新和刪除操作
????????除了執行查詢,pymysql
?也支持執行插入、更新和刪除等操作。使用?execute()
?方法執行這些操作,可以將相應的 SQL 語句作為參數傳遞給它。
(1)插入操作
# 執行插入操作
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))# 提交事務
connection.commit()
(2)更新操作
# 執行更新操作
cursor.execute("UPDATE table_name SET column1 = %s WHERE column2 = %s", ('new_value', 'condition'))# 提交事務
connection.commit()
(3)刪除操作
# 執行刪除操作
cursor.execute("DELETE FROM table_name WHERE column1 = %s", ('condition',))# 提交事務
connection.commit()
????????在上述示例中,我們使用?execute()
?方法執行了插入、更新和刪除操作,并使用參數占位符?%s
?來傳遞值。最后,我們通過?connection.commit()
?提交事務。
6、關閉連接
在完成數據庫操作后,不要忘記關閉數據庫連接,以釋放資源。
# 關閉游標對象
cursor.close()# 關閉數據庫連接
connection.close()
在上述示例中,我們使用?close()
?方法關閉了游標對象和數據庫連接。
7、完整實例
????????以下是一個完整的例子,展示了如何連接到MySQL數據庫、創建表、插入數據、執行查詢并獲取結果:
import pymysql# 建立數據庫連接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)try:# 創建游標對象cursor = connection.cursor()# 創建表create_table_query = '''CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,department VARCHAR(100))'''cursor.execute(create_table_query)# 插入數據insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"employees_data = [('John Doe', 30, 'IT'),('Jane Smith', 35, 'HR'),('Mark Johnson', 28, 'Sales')]cursor.executemany(insert_query, employees_data)# 提交事務connection.commit()# 執行查詢select_query = "SELECT * FROM employees"cursor.execute(select_query)# 獲取查詢結果的所有行數據rows = cursor.fetchall()# 打印查詢結果for row in rows:print(row)finally:# 關閉游標對象和數據庫連接cursor.close()connection.close()
在上述示例中,我們首先建立了與MySQL數據庫的連接,然后使用游標對象執行以下操作:
-
創建表:我們使用
CREATE TABLE
語句創建了一個名為employees
的表,具有id、name、age和department等列。 -
插入數據:我們使用
executemany()
方法批量插入了幾條員工數據。 -
提交事務:使用
connection.commit()
提交所有的插入操作,將數據持久化到數據庫。 -
執行查詢:我們執行了一個簡單的
SELECT
查詢語句,并使用fetchall()
方法獲取查詢結果的所有行數據。 -
打印查詢結果:我們遍歷查詢結果,并將每一行數據打印出來。
-
最后,關閉了游標對象和數據庫連接,釋放了資源。
8、連接池
????????使用pymysql
的ConnectionPool()
函數創建一個數據庫連接池對象。該函數接受連接參數,例如主機名、用戶名、密碼、數據庫名等,以及一些連接池相關的參數,例如最大連接數、最小空閑連接數等。
以下是創建連接池的示例:
# 創建連接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)
????????在上述示例中,我們使用了一些常用的連接池參數,如maxconnections
表示最大連接數,mincached
表示最小空閑連接數。可以根據實際需求調整這些參數。
????????使用連接池對象的connection()
方法從連接池中獲取一個數據庫連接。這樣,每次需要連接時,可以直接從連接池中獲取,而不需要手動創建連接。
# 從連接池獲取連接
connection = connection_pool.get_connection()
現在,可以使用connection
對象執行數據庫操作。例如執行查詢、插入、更新和刪除等。
# 創建游標對象
cursor = connection.cursor()# 執行查詢
cursor.execute("SELECT * FROM table_name")# 獲取查詢結果的所有行數據
rows = cursor.fetchall()# 打印查詢結果
for row in rows:print(row)# 關閉游標對象
cursor.close()# 將連接返回給連接池
connection_pool.release(connection)
在上述示例中,使用連接對象的cursor()
方法創建游標對象,并執行了一個查詢操作。最后,我們關閉了游標對象,并使用連接池的release()
方法將連接返回給連接池。
在程序結束時,確保關閉連接池,以釋放資源。
# 關閉連接池
connection_pool.close()
以下是一個完整的pymysql
連接池的示例:
import pymysql.cursors# 創建連接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)try:# 從連接池獲取連接connection = connection_pool.get_connection()# 創建游標對象cursor = connection.cursor()# 執行查詢cursor.execute("SELECT * FROM table_name")# 獲取查詢結果的所有行數據rows = cursor.fetchall()# 打印查詢結果for row in rows:print(row)# 關閉游標對象cursor.close()# 將連接返回給連接池connection_pool.release(connection)finally:# 關閉連接池connection_pool.close()
在上述示例中,首先創建了一個pymysql
連接池對象,設置了連接池的參數,如最大連接數和最小空閑連接數。
然后,在try-finally
塊中執行以下操作:
-
從連接池獲取連接:
使用連接池對象的
get_connection()
方法從連接池中獲取一個數據庫連接。 -
執行查詢:
使用獲取的連接對象創建游標對象,并執行查詢操作。
-
獲取查詢結果:
使用游標對象的
fetchall()
方法獲取查詢結果的所有行數據。 -
打印查詢結果:
遍歷查詢結果,并將每一行數據打印出來。
-
關閉游標對象:
使用游標對象的
close()
方法關閉游標對象。 -
將連接返回給連接池:
使用連接池對象的
release()
方法將連接返回給連接池,以便重復使用。
最后,在finally
塊中,關閉了連接池,確保在程序結束時釋放資源。