使用Sqlite3和Python选择并插入大量数据

时间:2017-11-09 16:52:09

标签: python sql select sqlite insert

我正在使用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个。”

处理此类任务的最佳方法是什么?

2 个答案:

答案 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