我正在使用python创建字符串集并尝试查找该字符串是否在sqlite表中。如果是,我会将其插入另一个表。但是,对每个字符串值使用一个“LIKE”运算符需要花费太多时间。所以我尝试将我想要搜索的每个字符串组合成一个SELECT
INSERT INTO table1 (ID, str0, str1, str2, str3)
SELECT m.ID, m.str0, m.str1, m.str3, 2 FROM table2 m
WHERE m.str0 LIKE "%xyz%" OR m.str0 LIKE "%asd%" OR m.str0 LIKE "%qwe%" .....
(goes on and on and on and on)
在一个INSERT中使用execute()创建了一个错误,查询应该小于1000个char。
创建一个列表,其中l = [%xyz%,%asd%,%qwe%]并尝试使用executemany()
conn.executemany('INSERT INTO table1 (ID, str0, str1, str2, str3)
SELECT m.ID, m.str0, m.str1, m.str2, 2 FROM table 2 m
WHERE m.str0 LIKE ?',l)
但它给出了一个错误,即“sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了5个。”
处理此类任务的最佳方法是什么?
答案 0 :(得分:0)
executemany
期待传递给函数的列表列表。而不是一维列表,使用两个维度。另请注意,您要在数据库中插入五个值,即“(ID,str0,str1,str2,str3)”,其中列表中提供了三个值。尝试添加更多值:
l = [[%xyz%, %asd%, %qwe%, %something%, %somethingelse%]]
答案 1 :(得分:-1)
对于这种情况,您应该使用IN
子句。
SELECT * FROM table
WHERE table.str0 IN ('str1', 'str2', 'str3'); // With match any rows where str0 equals any of the passed values ('str1', 'str2', 'str3')
您可以详细了解HERE。