[英]Bulk insert huge data into SQLite using Python
我读到了这个: 使用 Python 将 CSV 文件导入到 sqlite3 数据库表中
似乎每个人都建议使用逐行读取而不是使用来自 SQLite 的批量 .import。 但是,如果您有数百万行数据,这将使插入变得非常缓慢。 有没有其他方法可以规避这种情况?
更新:我尝试了以下代码逐行插入,但速度没有我预期的那么好。 有没有办法改进它
for logFileName in allLogFilesName:
logFile = codecs.open(logFileName, 'rb', encoding='utf-8')
for logLine in logFile:
logLineAsList = logLine.split('\t')
output.execute('''INSERT INTO log VALUES(?, ?, ?, ?)''', logLineAsList)
logFile.close()
connection.commit()
connection.close()
由于这是谷歌搜索的最高结果,我认为更新这个问题可能会很好。
从你可以使用的python sqlite docs
import sqlite3
persons = [
("Hugo", "Boss"),
("Calvin", "Klein")
]
con = sqlite3.connect(":memory:")
# Create the table
con.execute("create table person(firstname, lastname)")
# Fill the table
con.executemany("insert into person(firstname, lastname) values (?,?)", persons)
我已经使用这种方法一次提交超过 50k 行插入,而且速度非常快。
使用生成器表达式将数据动态分成块,在事务中插入。 这是sqlite优化常见问题的引用:
除非已经在一个事务中,否则每个 SQL 语句都会为其启动一个新事务。 这是非常昂贵的,因为它需要为每个语句重新打开、写入和关闭日志文件。 这可以通过用 BEGIN TRANSACTION 包装 SQL 语句序列来避免; 并结束交易; 声明。 对于不改变数据库的语句,也可以获得这种加速。
这里是你的代码可能看起来怎么样。
此外,sqlite 能够导入 CSV 文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.