通过BEGIN TRANSACTION和COMMIT包装INSERT

时间:2018-04-05 21:40:43

标签: python sqlite

我的班级有一些代码。这是关于从另一个数据库创建一个数据库。有一个INSERT方法。这需要很长时间。我阅读了FAQ,我知道我需要在多个INSERT周围放置BEGIN TRANSACTION和COMMIT,但我发誓,我尝试了c.execute(''BEGIN TRANSACTION')和c.execute(“COMMIT”)的每个地方 - 总是相同的ca 5 kb / s。请告诉我这些指令的适当位置,或告诉我还有什么问题。

记录 - 我正在使用5400转硬盘。

这是原始代码:

toArray()

编辑: 第一档: https://raw.githubusercontent.com/jOOQ/jOOQ/master/jOOQ-examples/Sakila/sqlite-sakila-db/sqlite-sakila-schema.sql

第二个: https://raw.githubusercontent.com/jOOQ/jOOQ/master/jOOQ-examples/Sakila/sqlite-sakila-db/sqlite-sakila-insert-data.sql

关于INSERT的全部内容。有几个表,整个sql文件从这些表中删除开始,然后231K行的INSERTS代码如下所示。

import sqlite3

conn = sqlite3.connect('/path/to/database.db')
c = conn.cursor()

with open('sqlite-sakila-schema.sql', 'r', encoding='utf-8') as create_file:
    create_query = create_file.read()
with open('sqlite-sakila-insert-data.sql', 'r', encoding='utf-8') as insert_file:
    insert_query = insert_file.read()

c.executescript(create_query)
c.executescript(insert_query)

conn.commit()
conn.close()

1 个答案:

答案 0 :(得分:0)

尝试将SQLITE_MAX_SQL_LENGTH个查询合并到一个查询中:

{{1}}

SQLite对单个查询的大小有限制,这是{{1}}的值,默认为1,000,000字节。因此,您需要增加此限制或将此查询拆分为适合限制的组。以1000行为一组进行这些操作可能会产生显着的差异。