Python 3.6.5中SQLite3查询无法使用比较运算符的问题求助
解决SQLite查询中的OperationalError语法错误
Hey Harry, let's get to the bottom of this error right away!
问题的核心原因
你遇到的OperationalError: near ">": syntax error是因为SQL语法不符合标准。在SQL里,IS运算符是专门用来判断值是否为NULL(比如bytes IS NULL或bytes IS NOT NULL),它不能和>这类数值比较运算符组合使用。你写的bytes is > ?是完全错误的语法,所以SQLite无法解析它。
关于Python 2.7的疑惑
其实这里大概率是你的回忆偏差——SQLite的语法规则在Python 2和3的sqlite3模块中是完全一致的,这种错误写法在任何版本里都应该会抛出相同的语法错误。可能你之前在Python 2.7中运行的是正确的版本(没加is),只是现在记混了。
正确的查询写法
只需要去掉多余的is,就能正常执行查询了:
c.execute("select count from mydb where bytes > ?", (myvariable,))
如果你的实际需求是要同时筛选bytes不为NULL且大于指定值,可以这样写:
c.execute("select count from mydb where bytes IS NOT NULL AND bytes > ?", (myvariable,))
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

