【发布时间】:2019-07-11 00:43:49
【问题描述】:
我使用 mysql.connector 在 Python 中连接到数据库。我可以创建将值插入数据库的查询,例如
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)
mydb.commit()
但我想知道如何对列表做同样的事情(列表是动态的,所以有时它看起来像这样:[val1, val2, val3] 而其他时候看起来像这样 [val1, val2, val3, val4, .. .val55]。我已经准备好查询:
INSERT INTO tablename ("+', '.join(dataset.columns.tolist())+") VALUES (%s, %s)" 但问题是如何处理 VALUES 中的参数 %s,因为有时正如我所说,它可能是 4,有时是 55。到目前为止,我唯一的想法是在循环中创建字符串并添加尽可能多的 %s参数根据需要。
【问题讨论】:
-
你知道executemany的存在吗?
-
是的,但我仍然需要传递参数 %s sql = "INSERT INTO customers (name, address) VALUES (%s, %s)" mycursor.executemany(sql, val)
-
executemany完全满足您的需求。你能展示你的python代码吗? -
我在 VALUES 中遇到了 %s 参数的问题。如果我是正确的,此参数会告诉您将传递多少个参数到插入语句中。问题是我不知道我会通过多少。有时可能是 4 有时是 55,所以我不能用 VALUES(%s, %s) 编写查询,因为它告诉我将只传递两个参数(我需要灵活,我不知道如何才能实现这是我的代码 sql = "INSERT INTO tableone("+', '.join(data.columns.tolist())+") VALUES (%s, %s, %s)" mycursor.executemany(sql, data.values. tolist())
-
花点时间阅读documentation。如果您仍有问题 - 准备一个 MVCE 说明您的问题