2016-02-25 76 views
1

我正在嘗試解決由ORMs封裝的SQLite固有的999變量限制,例如peewee。我正在嘗試構建幾行〜50k行和〜20列的表格。但是,由於999的限制,我必須將插入限制爲每插入語句大約50行。這非常慢。sqlite - 快速構建主鍵的表

我該如何讓這個更快?如果我沒有主鍵約束,那麼這個要求就會消失,因爲我可以直接使用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變量,但我擔心將此變量增加到某個龐大數字的影響。

+0

無論問題是什麼,每個INSERT語句的行數太少不是它。 –

回答

0

請確保您的insert語句在transaction內執行,否則將爲每個相當耗時的語句打開隱式事務。然後執行很多連續的語句應該快得多。