[英]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.