首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用格式化输出自动扩展Python列表

问使用格式化输出自动扩展Python列表
EN

Stack Overflow用户
提问于 2008-11-24 22:02:30
回答 5查看 5.3K关注 0票数 6

有没有人知道有没有办法在Python中自动扩展一个用逗号分隔的列表?我正在编写一些使用MySQLdb库的Python代码,并尝试使用某些键值动态更新MySQL数据库中的行列表。

例如,在下面的代码中,我希望将record_ids列表中的数值展开为SQL "IN“子句。

代码语言:javascript
复制
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()

任何帮助都将不胜感激!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-24 22:07:00

尝试:

代码语言:javascript
复制
",".join( map(str, record_ids) )

",".join( list_of_strings )通过用逗号分隔字符串来连接字符串列表

如果你有一个数字列表,map( str, list )会把它转换成一个字符串列表

票数 17
EN

Stack Overflow用户

发布于 2008-11-24 23:09:47

我这样做(以确保使用绑定):

代码语言:javascript
复制
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注入攻击。

票数 3
EN

Stack Overflow用户

发布于 2008-11-24 22:53:28

对于给定的答案,请注意,您可能希望将空列表例作为"where rec_id in ()“的特殊情况,因为它不是有效的SQL,因此会得到一个错误。

像这样手动构建SQL时也要非常小心,而不是仅仅使用自动转义参数。对于一个整数列表,它是有效的,但是如果您正在处理从用户输入接收到的字符串,那么这样做会打开一个巨大的SQL注入漏洞。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/315672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档