使用Python列表信息删除MYSQL中的多行

6 投票
6 回答
11110 浏览
提问于 2025-04-16 17:23

如果有一个列表 LL:

LL = ['foo', 'bar', 'noo', 'boo',]

这个列表里的内容在一个 MySQL 数据库表中,想要在 ID 列里测试这些 ID 是否存在。

我可以用下面的方式来删除所有在 LL 列表中的 ID 所对应的行:

 csr.execute("""DELETE FROM test.test WHERE ID = "Foo"; """)
  csr.execute("""DELETE FROM test.test WHERE ID = "bar"; """)  
  csr.execute("""DELETE FROM test.test WHERE ID = "noo"; """)
  csr.execute("""DELETE FROM test.test WHERE ID = "boo"; """)  

那我该怎么用程序来实现这个呢?

6 个回答

1
for item in LL:
    csr.execute("DELETE FROM test.test WHERE ID = '%s'", item)

像这样吗?

2

在MySQL中,你需要用 %s 来代替 ? 作为参数的标记。还有,别忘了提交你的更改。

product_list = [645, 64, 9785, 587]
query = "DELETE FROM products WHERE id IN (%s)" % ",".join(["%s"] * len(product_list))
cursor.execute(query, product_list)
connection.commit()
12

你可以通过一个简单的查询来实现:

id_list = ['abc', 'def', 'ghi']
query_string = "delete from test where id in (%s)" % ','.join(['?'] * len(id_list))
cursor.execute(query_string, id_list)

因为在执行替换时,cursor.execute会对字符串进行处理,所以这个例子是安全的,不会受到SQL注入攻击的影响。

撰写回答