一尘不染

SQLite参数替换和引号

python

我有这行工作正常:

c.execute('select cleanseq from cleanseqs WHERE newID="%s"'%name)

但是我想使用SQLite参数替换而不是字符串替换(因为我在这里看到这更安全)。

这是我的(失败)尝试:

t = (name,)
c.execute('select cleanseq from cleanseqs WHERE newID="?"',t)

但是此行返回:

‘提供的装订数量不正确。当前语句使用0,并且提供了1。

因此,我声明的左部分无效。我正在提供一个绑定(名称,以t表示),但似乎没有解析问号(?)。如果删除围绕?的引号,则可以使用。但是我希望这些报价保持不变,因为我记得在某些情况下需要使用这些报价。

所以问题是:如何转换此行:

c.execute('select cleanseq from cleanseqs WHERE newID="%s"'%name)

阅读 117

收藏
2020-12-20

共1个答案

一尘不染

关于“”“如果我删除围绕?的引号,则可以。但是我希望将引号保留在那里,因为我记得在某些情况下需要它们。”“”

您自己构建整个SQL语句时所记得的内容是无关紧要的。

新的故事是:用?标记?SQL语句中要替换值的每个位置,然后传入一个包含每个?一个值的元组。-就这么简单;包装器将引用任何字符串以确保它们是可接受的SQL常量。

2020-12-20