使用pysqlite如何将用户定义类型用作比较中的值,例如: g:“...... WHERE columnName>用户类型”?
例如,我已经定义了一个带有必要注册,转换器等的bool类型.Pysqlite / Sqlite按照INSERT和SELECT操作的预期响应(bool'True'存储为整数1并返回为True)。 / p>
但是当在“SELECT * from tasks WHERE display = True”或“...... WHERE display ='True。”中使用bool时,它会失败。 “在第一种情况下,Sqlite报告错误,即没有名为True的列。在第二种情况下,不返回任何记录。如果使用1代替True,则选择有效。使用pysqlite自己的日期和时间戳适配器时,我似乎遇到了同样的问题。
我可以解决此行为和其他用户类型的这种行为,但这不是那么有趣。我想知道在查询中是否使用用户定义的类型是不可能的,这样我就不会在这个特定的墙上不停地敲打着。
谢谢。
答案 0 :(得分:1)
使用正确的方法将变量传递给查询:不构建查询,使用问号并将参数作为元组传递给execute()
。
myvar = True
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,))
这样sqlite驱动程序将直接使用该值。不再需要逃避,引用,转换。
对每个参数使用此技术,甚至是字符串,整数等。这样就可以自动避免SQL注入。
答案 1 :(得分:0)
您可能需要将其强制转换为正确的类型。尝试“SELECT * FROM tasks WHERE(display = CAST('True'AS bool))”。