我读到了这一点:使用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()
Run Code Online (Sandbox Code Playgroud)
小智 34
由于这是Google搜索的最佳结果,我认为更新此问题可能会更好.
从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)
Run Code Online (Sandbox Code Playgroud)
我已经使用这种方法一次提交超过50k的行插入,而且速度很快.
ale*_*cxe 18
使用生成器表达式将数据动态划分为块,在事务中进行插入.以下是sqlite优化FAQ的引用:
除非已在事务中,否则每个SQL语句都会为其启动一个新事务.这非常昂贵,因为它需要为每个语句重新打开,写入和关闭日志文件.通过使用BEGIN TRANSACTION包装SQL语句序列可以避免这种情况.和END TRANSACTION; 声明.对于不改变数据库的语句,也可以获得此加速.
以下是您的代码的外观.
此外,sqlite还能够导入CSV文件.
| 归档时间: |
|
| 查看次数: |
35094 次 |
| 最近记录: |