【问题标题】:pysqlite user types in select statementpysqlite 用户类型在 select 语句中
【发布时间】:2010-10-11 04:55:39
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: python sqlite pysqlite


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2018-06-01
        • 2015-05-28
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多