如何使用FlaskSQLAlChemy将.txt文件中的数百万或行插入到SQLite3数据库中?我尝试一次只读取.txt文件中的一行,并在循环中添加和提交它们,但注意到这需要花费大量时间。我怎样才能有效地做到这一点呢?我尝试将此解决方案https://stackoverflow.com/a/7137270实现到我的代码中,但无法使其工作。
表架构如下所示:
class table(db.Model):
id = db.Column(db.Integer, primary_key=True)
col1 = db.Column(db.Integer)
col2 = db.Column(db.Integer)
col3 = db.Column(db.String(50))
col4 = db.Column(db.String(50))
col5 = db.Column(db.String(50))
col6 = db.Column(db.Integer)
col7 = db.Column(db.String(50))
col8 = db.Column(db.Integer)
col9 = db.Column(db.Integer)
col10 = db.Column(db.Integer)
col11 = db.Column(db.Integer)
col12 = db.Column(db.Integer)
.txt
文件中的行如下所示:hjk;28770930;Y;T;C;;asd;;1;1233;1233;0.00081103
还有大约8500万行要添加到数据库中。
1条答案
按热度按时间svmlkihl1#
我找到了一个解决方案,可以显著加快交易速度。我使用了以下答案:
我使用
chunks()
函数将文件分成块并生成一个生成器,而不是每次读取一行并在每次迭代中写入一行。然后在load_data_table()
函数中,循环遍历这些块,并在包含10000行的每个块之后提交。如果有人能想出一个更快的方法,我仍然很感兴趣,因为这也需要大约5个小时。
以下是我的代码: