可变长度行

时间:2015-06-01 09:09:11

标签: python sql sqlite python-3.x escaping

我已经阅读了有关使用parametrized execute call为您执行所有SQL转义的建议,但这似乎仅在您事先知道列数时才有效。

我循环遍历CSV文件,每个表一个,并填充本地数据库以进行测试。每个表都有不同的列数,所以我不能简单地使用:

sql = "INSERT INTO TABLE_A VALUES (%s, %s)"
cursor.execute(sql, (val1, val2))

我可以非常灵活地将sql语句构建为字符串,但是这并没有让我使用cursor.execute的SQL转义工具,所以如果输入包含撇号或类似的,那么失败。

似乎应该有一种简单的方法来做到这一点。有吗?

1 个答案:

答案 0 :(得分:2)

如果您知道参数的数量,可以创建一个参数列表:

count = ...
sql = "INSERT INTO ... VALUES(" + ",".join(count * ["?"]) + ")"
params = []
for i in ...:
    params += ['whatever']
cursor.execute(sql, params)