我有这行工作正常:
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表示),但似乎没有解析问号(?)。如果删除围绕?的引号,则可以使用。但是我希望这些报价保持不变,因为我记得在某些情况下需要使用这些报价。
所以问题是:如何转换此行:
关于“”“如果我删除围绕?的引号,则可以。但是我希望将引号保留在那里,因为我记得在某些情况下需要它们。”“”
您自己构建整个SQL语句时所记得的内容是无关紧要的。
新的故事是:用?标记?SQL语句中要替换值的每个位置,然后传入一个包含每个?一个值的元组。-就这么简单;包装器将引用任何字符串以确保它们是可接受的SQL常量。