【问题标题】:SQLite execute statement for variable-length rows可变长度行的 SQLite 执行语句
【发布时间】:2015-06-01 09:09:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你能提供一个转义对你不起作用的例子吗?
  • 另一种方法是escape 源(CSV 文件)本身的撇号,方法是将所有单撇号替换为双撇号。这只是节省您时间的一种解决方法。

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


【解决方案1】:

如果您知道参数的数量,则可以创建它们的列表:

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

【讨论】:

  • 嗯,好主意。尽管每个表的列数不同,但在运行时很容易找到每个表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多