如何提高在sqlite3中创建表的性能

时间:2015-03-03 01:24:03

标签: python sqlite

我使用python& sqlite3做的事情,我需要在sqlte3中创建大量的表。所有表都具有相同的模式:

ID |    AA BB CC DD EE FF GG
1      a  b  c  d  e  f  g
.      ....................
.      ....................
.      ....................
2000   ....................


for i in stl_lines[1:]:
    line = i.split(' ')
    sql = "CREATE TABLE '%06d'" \
                       "(A  INTEGER UNIQUE NOT NULL," \
                       " B INTEGER NOT NULL," \
                       " C INTEGER NOT NULL," \
                       " D INTEGER NOT NULL," \
                       " E INTEGER NOT NULL," \
                       " F REAL    NOT NULL," \
                       " G INTEGER NOT NULL," \
                       "PRIMARY KEY(DATE))" % (int(line[0]))
    cursor.execute(sql)

当我运行此代码时,我发现创建一个表几乎需要1~2个,而且我有超过2000个表,创建db需要花费大约3000秒,这个成本是不可接受的。 如何提高创建表的速度,或者您对设计数据库有什么建议? 谢谢!


最后,我通过 CL。的帮助解决了这个问题。现在我可以用2s创建2000个表!非常感谢他/她。

这是我的新代码:

db = sqlite3.connect(DB_FILE)
db.isolation_level = None
cursor.execute('BEGIN ')
for i in stock_tables:
    cursor.execute(i)
cursor.execute('COMMIT ')
db.isolation_level = ''

1 个答案:

答案 0 :(得分:1)

你的问题是Python;它试图变得聪明并自动为每个CREATE TABLE语句(documentation)提交一个事务。

您想要使用单个交易。 将isolation_level设置为None,并在所有陈述周围执行一次BEGIN / COMMIT。