我有一个要删除的user_id列表:
user_id是str
类型。
users = ['user1', 'user2', 'user3']
当前我正在使用这些代码删除它们
query_delete = 'delete from users where user_id in ({});'.format('?, '*len(users))
# delete from users where user_id in (?, ?, ?, );
query_delete.replace(", )", ")")
# delete from users where user_id in (?, ?, ?);
cursor.execute(query_delete, users)
我认为使用.format('?, '*len(users))
来对查询进行参数化还不够优雅。
有没有更好的方法来使代码更优雅,更易读?
编辑
我在CentOS 7和MySQL 8上使用python 3.6.5。
我希望查询执行为
delete from users where user_id in ('user1', 'user2', 'user3');
答案 0 :(得分:0)
根据所使用的数据库和数据库接口库,使用库的参数传递机制可能会更容易。例如,对于PostgreSQL和psycopg2,类似这样的方法应该起作用:
users = [ 'user1', 'user2', 'user3' ]
cursor.execute("DELETE FROM user WHERE user_id = ANY (%(u)s)",
{ 'u': users })
(键入时未经测试,因此可能充满了小错误)。
这还将消除SQL注入的风险。