我想使用MySQLdb创建一个参数化查询,例如:
serials = ['0123456', '0123457']
c.execute('''select * from table where key in %s''', (serials,))
但最终发送给DBMS的是:
select * from table where key in ("'0123456'", "'0123457'")
是否可以创建这样的参数化查询?或者我必须循环自己并建立一个结果集?
注意:executemany(…)对此不起作用-它只返回最后一个结果:
>>> c.executemany('''select * from table where key in (%s)''',
[ (x,) for x in serials ] )
2L
>>> c.fetchall()
((1, '0123457', 'faketestdata'),)
最后的解决方案改编自加雷斯的聪明回答:
# Assume check above for case where len(serials) == 0
query = '''select * from table where key in ({0})'''.format(
','.join(["%s"] * len(serials)))
c.execute(query, tuple(serials)) # tuple() for case where len == 1