一、cursor.executemany函數介紹
在Python中操作SQL,我們通常會用到cursor對象, 它是Python DB-API中所有數據庫游標的超類,可以實現對數據庫操作的各種方法,executemany()方法就是其中之一。
executemany()方法用於執行一條 SQL 語句,該 SQL 語句會執行多次,以實現一次操作多個數據,從而提高SQL的執行效率。和execute()方法不同的是,executemany()方法要求傳入的參數是元組嵌套的列表,列表中每個元組代表一組數據,而元組中的每個值則代表一個數據的字段值。簡而言之,就是executemany()方法實現了批量插入數據,可以使操作更加高效。
import pymysql
# 連接數據庫
conn = pymysql.connect(host='localhost', port=3306, user='root', password='666666', db='test_db')
# 創建游標對象
cursor = conn.cursor()
# 定義 SQL 語句
insert_sql = "INSERT INTO student_info VALUES (%s, %s, %s)"
# 定義數據
data = [
('001', '小明', 18),
('002', '小紅', 19),
('003', '小剛', 20)
]
# 批量插入數據
cursor.executemany(insert_sql, data)
# 提交
conn.commit()
# 關閉游標
cursor.close()
# 關閉連接
conn.close()
二、executemany函數使用注意事項
當使用executemany()方法批量插入數據時,需要注意以下事項:
1. SQL語句中需要有佔位符,因為executemany()方法會將數據作為參數傳遞給SQL語句執行;
2. 批量插入的數據必須為元組嵌套的列表形式,因為executemany()方法要將每一個元組作為參數傳遞給SQL語句;
3. 當批量插入大量數據時,我們可以使用executemany()方法來優化插入效率,但是在插入數據時需要考慮到事務的原子性,及時提交或回滾事務。
三、cursor.executemany與for循環一起使用
有時候我們需要批量插入數據到多個表中,這時候可以使用for循環和executemany()方法一起使用。
import pymysql
# 連接數據庫
conn = pymysql.connect(host='localhost', port=3306, user='root', password='666666', db='test_db')
# 創建游標對象
cursor = conn.cursor()
# 定義插入數據函數
def insert_data(table_name, data):
# 定義 SQL 語句
insert_sql = f"INSERT INTO {table_name} VALUES (%s, %s)"
# 批量插入數據
cursor.executemany(insert_sql, data)
# 定義數據
table1_data = [('001', '小明'), ('002', '小紅'), ('003', '小剛')]
table2_data = [('001', '語文'), ('002', '數學'), ('003', '英語')]
# 批量插入數據
insert_data('table1', table1_data)
insert_data('table2', table2_data)
# 提交
conn.commit()
# 關閉游標
cursor.close()
# 關閉連接
conn.close()
四、批量刪除數據的示例
cursor.executemany()不僅可以用於批量插入數據,還可以用於批量刪除數據。通過使用executemany()方法和delete語句,可以快速刪除指定id的數據。
import pymysql
# 連接數據庫
conn = pymysql.connect(host='localhost', port=3306, user='root', password='666666', db='test_db')
# 創建游標對象
cursor = conn.cursor()
# 定義刪除數據函數
def delete_data(ids):
# 定義 SQL 語句
delete_sql = "DELETE FROM student_info WHERE id = %s"
# 批量刪除數據
cursor.executemany(delete_sql, ids)
# 定義數據
ids = [(1,), (2,), (3,)]
# 批量刪除數據
delete_data(ids)
# 提交
conn.commit()
# 關閉游標
cursor.close()
# 關閉連接
conn.close()
原創文章,作者:KYKYV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/317084.html