使用 pysqlite 如何将用户定义类型用作比较中的值,例如。 g:“... WHERE 列名称 > 用户类型”?
例如,我定义了一个具有必要注册、转换器等的 bool 类型。Pysqlite/Sqlite 按预期响应 INSERT 和 SELECT 操作(bool 'True' 存储为整数 1 并返回为 True)。
但是当 bool 用于“SELECT * fromtask WHERE display = True”或“... WHERE display = 'True'”时,它会失败。 “在第一种情况下,Sqlite 报告错误,指出不存在名为 True 的列。在第二种情况下,不会返回任何记录。如果使用 1 代替 True,则该选择有效。我在使用 pysqlite 自己的日期和时间戳适配器时似乎遇到了同样的问题。
我可以针对此用户类型和其他用户类型解决此行为,但这并不那么有趣。我想知道在查询中是否可以使用用户定义的类型,这样我就不会一直用头撞这堵特定的墙。
谢谢。
最佳答案
使用向查询传递变量的正确方法:不要构建查询,使用问号并将参数作为元组传递给 execute()
。
myvar = True
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,))
这样 sqlite 驱动程序将直接使用该值。不再需要转义、引用、转换。
对每个参数都使用这种技术,甚至是字符串、整数等。这样您就可以自动避免 SQL 注入(inject)。
关于python - pysqlite 用户在 select 语句中键入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609516/