Tra*_*dez 2 python sqlite where-clause
就在最近使用 SQLite3 运行 python 3.3 时遇到了问题。我已经创建了一个相当大的表,所以我将只使用一个小例子:
CREATE TABLE X(omega TEXT, z TEXT, id INT);
Run Code Online (Sandbox Code Playgroud)
现在,我使用各种函数从主脚本访问该表。在其中一个功能中,我有代码:
cur.execute("SELECT omega,z FROM X WHERE omega=?",Omega)
Run Code Online (Sandbox Code Playgroud)
当我将 Omega 变量设置为单字符字符串时,这工作得很好。但是,当我增加字符数时(例如,如果 Omega='10'),则会出现以下错误:
cur.execute("SELECT omega,z FROM X WHERE omega=?",Omega)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
Run Code Online (Sandbox Code Playgroud)
现在,我找到了一个解决方法:
cur.execute("SELECT omega,z FROM X WHERE omega="+Omega)
Run Code Online (Sandbox Code Playgroud)
但我想知道为什么这行得通,而使用问号的“正确”方法却行不通。
提前致谢!
cur.execute("SELECT omega,z FROM X WHERE omega=?",(Omega,))
Run Code Online (Sandbox Code Playgroud)
由于字符串是可迭代的,它会尝试将每个字母绑定到 ? (例如,它看到cur.execute("SELECT omega,z FROM X WHERE omega=?",('1','0'))而不是cur.execute("SELECT omega,z FROM X WHERE omega=?",('10',))
如果你这样指定它知道字符串是绑定到问号的一项
根据此文档,第二个参数execute()应该是一个元组。据推测,绑定正在使用鸭子类型,并且由于字符串的作用类似于元组,因此它会被视为元组。您可以通过将第二个参数更改为元组来解决此问题:
cur.execute("SELECT omega,z FROM X WHERE omega=?", (Omega,))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5529 次 |
| 最近记录: |