我使用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 = ''
答案 0 :(得分:1)
你的问题是Python;它试图变得聪明并自动为每个CREATE TABLE语句(documentation)提交一个事务。
您想要使用单个交易。
将isolation_level
设置为None
,并在所有陈述周围执行一次BEGIN / COMMIT。