【问题标题】:How insert multiple values (list) to database via mysql python如何通过mysql python将多个值(列表)插入数据库
【发布时间】: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 说明您的问题

标签: python mysql


【解决方案1】:

由于您的 SQL 查询需要真正动态(更进一步,您会进入 ORM 和 SQL 工具包领域),我想您需要类似的东西

def gen_sql(fields, values):
     return f'INSERT INTO customers  ({",".join(fields)}) VALUES ({",".join(map(str,values))})'

print(gen_sql('name address'.split(), "'Johh' 'New-York'".split()))
print(gen_sql('a b c '.split(), (1,2,3)))

但是“这里有龙!”:

  • 引用转义是调用者的责任
  • 没有防止 sql 注入

【讨论】:

  • Ok 可以很好地处理字符串,但可以传递给 VALUES 列表吗?
  • 查看我的代码中的prints - 第一个示例是传递列表 ["'Johh'", "'New-York'"]
  • 第二个例子是ints的元组
  • 哦,对不起,我在列表上使用了拆分(哪个 ofc 不起作用)。伙计,你很棒!感谢您的帮助
  • 代码生成是我在 python 中经常做的一项任务。但再次:当心!这里是龙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多