我們有如下數據列表,需要將該數據插入到對應的數據表student中(表的字段名和數據列表中字典的鍵名相同)
student_list = [
{"name": "Tony", "age": 19, "sex": "male"},
{"name": "Lisa", "age": 18, "sex": "female"},
{"name": "Jack", "age": 20, "sex": "male"}
]
使用pymysql批量插入數據可以用以下方法
cursor.executemany(sql, data_list)
上面的sql是一條包含占位符的插入語句,data_list就是需要插入的數據
可以通過以下方法來生成對應的sql
def generate_sql(data_list):
data = data_list[0] # 取出第一條
cols = ", ".join('`{}`'.format(k) for k in data.keys()) # 字段名拼接
val_cols = ', '.join('%({})s'.format(k) for k in data.keys()) # 對應值的占位符拼接
sql = """
INSERT INTO student(%s) VALUES(%s)
""" % (cols, val_cols)
return sql
生成的sql如下:
INSERT INTO student(`name`, `age`, `sex`) VALUES(%(name)s, %(age)s, %(sex)s)
生成sql后就可以使用executemany()方法批量插入數據到數據庫中,全部代碼如下
import pymysql
MYSQL_CONFIG = {
'host': 'localhost', # IP地址
'port': 3306, # 端口
'user': 'myuser', # 用戶名
'passwd': '111111', # 密碼
'db': 'myclass', # 數據庫
'charset': 'utf8', # 編碼
}
def generate_sql(data_list):
data = data_list[0]
cols = ", ".join('`{}`'.format(k) for k in data.keys())
val_cols = ', '.join('%({})s'.format(k) for k in data.keys())
sql = """
INSERT INTO student(%s) VALUES(%s)
""" % (cols, val_cols)
return sql
def main():
student_list = [
{'name': 'Tony', 'age': 19, 'sex': 'male'},
{'name': 'Lisa', 'age': 18, 'sex': 'female'},
{'name': 'Jack', 'age': 20, 'sex': 'male'}
]
conn = pymysql.connect(**MYSQL_CONFIG) # 數據庫連接
cur = conn.cursor() # 游標對象
sql = generate_sql(student_list)
cur.executemany(sql, student_list)
conn.commit()
cur.close()
conn.close()
if __name__ == '__main__':
main()
執行以上代碼,就可以看到數據成功插入到表中
name | age | sex |
---|---|---|
Tony | 19 | male |
Lisa | 18 | female |
Jack | 20 | male |