1

使用 pysqlite 如何将用户定义类型用作比较中的值,例如。g:“... WHERE columnName > userType”?

例如,我定义了一个带有必要注册、转换器等的 bool 类型。Pysqlite/Sqlite 按预期响应 INSERT 和 SELECT 操作(bool 'True' 存储为整数 1 并返回为 True)。

但是,当布尔用于“SELECT * from tasks WHERE display = True”或“... WHERE display = 'True'”时,它会失败。“ 第一种情况 Sqlite 报错没有名为 True 的列。在第二种情况下,不返回任何记录。如果使用 1 代替 True,则选择有效。使用 pysqlite 自己的日期和时间戳适配器时,我似乎遇到了同样的问题。

我可以为这种和其他用户类型解决这种行为,但这并不那么有趣。我想知道是否可以在查询中使用用户定义的类型,这样我就不会一直把头撞在这个特定的墙上。

谢谢你。

4

2 回答 2

1

使用将变量传递给查询的正确方法:不要构建查询,使用问号并将参数作为元组传递给execute().

myvar = True
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,))

这样 sqlite 驱动程序将直接使用该值。不再需要转义、引用、转换。

对每个参数使用这种技术,甚至是字符串、整数等。这样可以自动避免 SQL 注入。

于 2009-03-04T17:27:33.887 回答
0

您可能必须将其转换为正确的类型。尝试“SELECT * FROM tasks WHERE (display = CAST ('True' AS bool))”。

于 2009-03-04T14:17:11.893 回答