从Python的传递可变数量参数的个数到mysql
问题描述:
我想建立的可变参数个数的询问:(!这是默认情况下不显示)从Python的传递可变数量参数的个数到mysql
group_ids = ', '.join(str(Rules[s].value) for s in groups)
cursor.execute("SELECT a, b, c
FROM my_table
WHERE a IN (%(group_ids)s)
;",
{'group_ids': group_ids})
但是,这会导致一个警告: 截断不正确DOUBLE值:'30,12' 只使用第一个值,其余省略。 所以我用这个小黑客现在:
group_ids = ', '.join(str(Rules[s].value) for s in groups)
cursor.execute('\n'.join("SELECT a, b, c",
"FROM my_table",
"WHERE a IN %s" % group_ids
;")
我知道这些都是有效的值(从一个enum来),但我会摆脱即使SQL注入的可能性最远。
答
构建动态的SQL参数部分:
group_ids = [str(Rules[s].value) for s in groups]
sql = "SELECT a, b, c FROM my_table WHERE a IN (%s)" % (
','.join(['%s'] * len(group_ids))
)
cursor.execute(sql, group_ids)
注:以上不会为空ID列表工作。用条件来保护它:
if not group_ids:
# skip execution of the query.
对不起,不起作用:mysql.connector.errors.ProgrammingError:处理格式参数失败; Py thon'list'无法转换为MySQL类型 – MKesper 2014-09-26 09:06:23
@MKesper,它应该工作。看到这个:https://asciinema.org/a/12498 – falsetru 2014-09-26 09:29:30
@MKesper,确保你传递了'sql'和'group_ids',一个字符串列表。 – falsetru 2014-09-26 09:33:31