Python中的MySQL动态查询语句

时间:2011-07-05 22:06:23

标签: python mysql sql

我正在尝试完成以下内容:

cursor = db.cursor() 
cursor.execute('INSERT INTO media_files (%s, %s, %s, %s ... ) VALUES (%s, %s, %s, %s,   ...)', (fieldlist, valuelist))
cursor.commit()

我有2个列表,fieldlist和valuelist,每个列表包含相同数量的项目。生成动态MySQL查询语句的最佳方法是将列存储在fieldlist中,并将值存储在valuelist中?

2 个答案:

答案 0 :(得分:3)

cursor.execute('INSERT INTO media_files (%s) VALUES (%%s, %%s, %%s, %%s,   ...)' % ','.join(fieldlist), valuelist)

更清楚:

sql = 'INSERT INTO media_files (%s) VALUES (%%s, %%s, %%s, %%s,   ...)' % ','.join(fieldlist)
cursor.execute(sql, valuelist)

答案 1 :(得分:2)

游标希望参数作为单个序列传递,因此您需要按顺序组合字段和值列表。

itertools.chain()完全确实如此,但它返回一个生成器,我不确定cursor.execute()是否会接受它作为param序列。试试吧。如果失败,请用list()

换行
import itertools
sql = 'INSERT INTO media_files (%s, %s, %s, %s ... ) VALUES (%s, %s, %s, %s,   ...)'
cursor.execute(sql, itertools.chain(fieldlist, valuelist))

修改

此解决方案将工作。这将导致字段名称被转义并用引号括起来,这会导致sql语法错误 我会留下这个答案,因为它可以作为一个有用的例子,但请看@Trent对该解决方案的回答。