python - 如何提高sqlite3建表的性能

标签 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多个表,创建数据库花费了我大约3000秒,这个成本是 Not Acceptable 。 如何提高创建表的速度,或者您对设计数据库有什么建议吗? 谢谢!

<小时/>

最后,在CL的帮助下,我解决了这个问题。。现在我可以在 2 秒内创建 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 = ''

最佳答案

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

您想改用单个事务。 设置isolation_levelNone,并在所有语句周围执行一次 BEGIN/COMMIT。

关于python - 如何提高sqlite3建表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28822520/

相关文章:

python - 更改 Python 使用的 TLS 版本

php - 如何制作按多种条件排序并在 PHP 中运行的 SQLite 查询

ios - 在 Sqlite 中对整数使用 'in' 子句

sqlite - 选择特定值 SQLite

python - 从 numpy 数组中的每个字符串中提取第一个字母

python - Tox 失败,因为 setup.py 找不到 requirements.txt

python - 类型错误: 'float' 对象无法解释为整数

python - Discord.py 使用 `with sqlite3.connection` 是一个坏主意吗?

ios - 使用核心数据更新对象会插入一条新记录

python - dict.get ('..' , None) 或者 None 是什么场景?