从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. 
+0

对不起,不起作用:mysql.connector.errors.ProgrammingError:处理格式参数失败; Py thon'list'无法转换为MySQL类型 – MKesper 2014-09-26 09:06:23

+0

@MKesper,它应该工作。看到这个:https://asciinema.org/a/12498 – falsetru 2014-09-26 09:29:30

+0

@MKesper,确保你传递了'sql'和'group_ids',一个字符串列表。 – falsetru 2014-09-26 09:33:31