Python SQLite多问号查询提示“row value misused”错误如何解决
错误原因
报错是SQL语法使用错误导致的:
- 相等判断运算符
=仅支持单值之间的比对,你在ISIN = (?,?)的写法中,右侧传入了2个参数,构成多值的行结构,SQLite无法完成单字段和多值的相等判断,因此触发row value misused报错。 - 匹配某字段是否属于多个值的范围,应当使用
IN运算符替代=。
修复代码
仅需要修改查询语句的运算符即可,修改后的完整代码如下:
import sqlite3 as objSQLite # 连接数据库 objDatabase = objSQLite.connect("Sample.db") objCursor = objDatabase.cursor() # 创建表 objCursor.execute("create table if not exists ScripData(ISIN text);") # 插入数据 objCursor.execute("insert or ignore into ScripData values(?)", ("Test1", )) objCursor.execute("insert or ignore into ScripData values(?)", ("Test2", )) objCursor.execute("insert or ignore into ScripData values(?)", ("Test3", )) objCursor.execute("insert or ignore into ScripData values(?)", ("Test4", )) objDatabase.commit() # 查询:将=替换为IN即可 objCursor.execute("select * from ScripData where ISIN IN (?,?)", ("Test1", "Test2", )) arrResult = objCursor.fetchall() print(arrResult)
运行后输出结果为:
[('Test1',), ('Test2',)]
符合提取ISIN匹配Test1、Test2全部记录的预期。
内容的提问来源于stack exchange,提问作者Sandeep S D
相关产品推荐
相关产品推荐

