[英]Sqlite executemany or union select for reduced db writes
当要在表中插入多行时,我试图减少对Sqlite数据库的写入次数。
到目前为止,我已经找到了两种方法来执行此操作,即使用联合选择语句或在sqlite3中使用executemany命令。
executemany是否可以通过一次写入工作?
作为参考,请参阅我正在使用的以下语句(联合选择):
INSERT INTO table1
SELECT "hello" AS field1, 15 AS field2, 1262340000 AS timestamp
UNION SELECT "byebye", 10, 1262340000
UNION SELECT "hi", 20, 1262340000
UNION SELECT "boo", 25, 1262340000
UPDATE
从安全的角度来看,我知道通过字符串连接构建SQL语句确实很糟糕,但是在这种情况下,数据库所有者也是数据提供者,因此可以忽略SQL注入问题。
这是针对Python 2.7
sqlite3版本2.6.0
事务提交时,SQLite将数据从其页面缓存刷新到磁盘。 因此,您只需要将所有INSERT放入一个事务中:
BEGIN;
INSERT INTO table1 VALUES('hello', 15, 1262340000);
INSERT INTO table1 VALUES('byebye', 10, 1262340000);
INSERT INTO table1 VALUES('hi', 20, 1262340000);
INSERT INTO table1 VALUES('boo', 25, 1262340000);
COMMIT;
Python 自动在您的背后插入事务 ,因此您可以只使用一堆execute()
或executemany()
:
data = [('hello', 15, 1262340000),
('byebye', 10, 1262340000),
('hi', 20, 1262340000),
('boo', 25, 1262340000)]
con.executemany("INSERT INTO table1 VALUES(?, ?, ?);", data)
con.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.