gpt4 book ai didi

python - Sqliteexecutemany 或 union select 以减少数据库写入

转载 作者:行者123 更新时间:2023-12-01 04:30:42 25 4
gpt4 key购买 nike

在向表中插入多行时,我正在尝试减少 Sqlite 数据库的写入次数。

到目前为止,我发现了两种执行此操作的方法,使用 union select 语句或使用 sqlite3 中的executemany 命令。

executemany 是否通过单次写入工作?

作为引用,请参阅我正在使用的以下语句(union select):

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

更新

我知道从安全角度来看,通过字符串连接构建 SQL 语句确实很糟糕,但在这种情况下,数据库所有者也是数据提供者,因此可以忽略 SQL 注入(inject)问题。

这是针对 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 automatically inserts transactions behind your back ,因此您可以只使用一堆 execute()executemany():

data = [('hello', 15, 1262340000),
('byebye', 10, 1262340000),
('hi', 20, 1262340000),
('boo', 25, 1262340000)]
con.executemany("INSERT INTO table1 VALUES(?, ?, ?);", data)
con.commit()

关于python - Sqliteexecutemany 或 union select 以减少数据库写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com