我正在使用包含不同数量项目的python列表,需要根据项目数构建动态字符串(数据库插入语句)。
例如:
l1 = ['one','two','three']
所需的输出是这样的。希望人们有更多关于如何在字符串中处理这个问题的pythonic建议。
"insert into {table} values ('{c1}', '{c2}', '{c3}')".format(table='tabName', c1=l1[0], c2=l1[1], c3=l1[2])
但如果我现在有一个带有第4个元素的列表,那么上面显然不会工作。 如果我的列表中有可变数量的项目(因此插入可变数量的数据库列),您如何建议我构建字符串?
提前感谢任何建议。
答案 0 :(得分:1)
您尝试做的事情是a very bad idea,并且不可能按照您尝试的方式进行。
通常,您根本不希望SQL查询是动态的;你想要一个像这样的固定字符串:
sql = 'INSERT INTO tabName VALUES(?, ?, ?)'
db.execute(sql, l1)
另外,您通常要添加列名,而不是依赖列排序(根据SQL标准,顺序完全是任意的,尽管在实践中几乎每个数据库都将始终使用创建列的顺序)。
在极少数情况下(例如,当您构建数据库管理工具时),您确实需要动态SQL,但您仍然希望使用参数。您可以通过动态地将参数放入查询,然后传递列表来完成此操作。像这样:
params = ', '.join('?' for _ in l1)
sql = 'INSERT INTO {table} VALUES({params})'.format(table=tabName, params=params)
db.execute(sql, l1)
(但当然,如果tabName
是用户输入的字符串,这至少与不使用参数一样危险。)