有没有人知道有没有办法在Python中自动扩展一个用逗号分隔的列表?我正在编写一些使用MySQLdb库的Python代码,并尝试使用某些键值动态更新MySQL数据库中的行列表。
例如,在下面的代码中,我希望将record_ids列表中的数值展开为SQL "IN“子句。
import MySQLdb
record_ids = [ 23, 43, 71, 102, 121, 241 ]
mysql = MySQLdb.connect(user="username", passwd="secret", db="apps")
mysql_cursor = mysql.cursor()
sqlStmt="UPDATE apps.sometable SET lastmod=SYSDATE() where rec_id in ( %s )"
mysql_cursor.execute( sqlStmt, record_ids )
mysql.commit()任何帮助都将不胜感激!
发布于 2008-11-24 22:07:00
尝试:
",".join( map(str, record_ids) )",".join( list_of_strings )通过用逗号分隔字符串来连接字符串列表
如果你有一个数字列表,map( str, list )会把它转换成一个字符串列表
发布于 2008-11-24 23:09:47
我这样做(以确保使用绑定):
sqlStmt=("UPDATE apps.sometable SET lastmod=SYSDATE() where rec_id in (%s)"
% ', '.join(['?' for n in record_ids]))
mysql_cursor.execute(sqlStmt, record_ids)
mysql.commit()这适用于您想要绑定的所有动态列表,而不会使您容易受到SQL注入攻击。
发布于 2008-11-24 22:53:28
对于给定的答案,请注意,您可能希望将空列表例作为"where rec_id in ()“的特殊情况,因为它不是有效的SQL,因此会得到一个错误。
像这样手动构建SQL时也要非常小心,而不是仅仅使用自动转义参数。对于一个整数列表,它是有效的,但是如果您正在处理从用户输入接收到的字符串,那么这样做会打开一个巨大的SQL注入漏洞。
https://stackoverflow.com/questions/315672
复制相似问题