使用SQLAlchemy向MySQL插入数据时遇ArgumentError错误求助
解决SQLAlchemy插入数据时的ArgumentError错误
问题原因
你用db.execute()方法传入了列表格式的rows参数,但execute()仅支持单个元组或字典作为参数;批量插入多行数据需要使用executemany()方法,这才是适配列表参数的正确方式。
修复方案
将代码中的execute替换为executemany,修改后的代码如下:
def insert_data(db, table, rows): db.executemany(f"INSERT INTO {table} VALUES (%s)", rows) db.commit()
补充说明
- 若仅插入单行数据,也可以直接传入元组而非列表(比如把
rows=[(1, 'asdsewadada', 'lajsdljasld', 'lol@gmail.com', 51)]改为rows=(1, 'asdsewadada', 'lajsdljasld', 'lol@gmail.com', 51)),但executemany()更通用,同时支持单行、多行插入场景。 - 注意:直接拼接表名存在SQL注入风险,建议用SQLAlchemy的
text对象包裹SQL语句提升安全性:
from sqlalchemy import text def insert_data(db, table, rows): db.execute(text(f"INSERT INTO {table} VALUES (%s)"), rows) db.commit()
或者使用ORM的insert构造器,完全规避字符串拼接风险:
from sqlalchemy import insert def insert_data(db, table_model, rows): db.execute(insert(table_model), rows) db.commit()
内容的提问来源于stack exchange,提问作者Abdulaziz Ibrahim
相关产品推荐
相关产品推荐

