sqlite - 使用主键快速构建表

时间:2016-02-25 18:51:52

标签: python sqlite

我试图在peewee等ORM包装时解决SQLite中固有的999变量限制。我正在尝试构建几十个表,每行约50k行和~20列。但是,由于999限制,我必须将插入限制为每插入语句约50行。这非常慢。

如何让它更快?如果我没有主键约束,那么这个要求就会消失,因为我可以使用pandas直接转储到SQL,但是稍后修改以获得主键是一种痛苦。

以下是一个例子:

from peewee import *

database = SqliteDatabase(None)

class Base(Model):
    class Meta:
        database = database


colnames = ["A", "B", "C", "D", "E", "F", "G", "H"]
cols = {x: TextField() for x in colnames}

table = type('mytable', (Base,), cols)
database.init('test.db')
database.create_tables([table])

data = []
for x in range(150):  # if this number is any higher this crashes
    data.append({x: 1 for x in colnames})


with database.atomic() as txn:
    table.insert_many(data).execute()

我如何解决这个限制?在peewee文档中,他们提到使用apsw,它能够修改SQLite max_variables变量,但我担心将这个变量增加到一些巨大数字的效果。

1 个答案:

答案 0 :(得分:0)

确保insert语句在transaction内执行,否则将为每个相当耗时的语句打开隐式事务。许多连续语句的执行应该快得多。