Python 3.6解压缩包含不同数量项目的列表

时间:2018-04-10 01:12:00

标签: python database list

我正在使用包含不同数量项目的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个元素的列表,那么上面显然不会工作。  如果我的列表中有可变数量的项目(因此插入可变数量的数据库列),您如何建议我构建字符串?

提前感谢任何建议。

1 个答案:

答案 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是用户输入的字符串,这至少与不使用参数一样危险。)