Python SQLAlchemy - 大量插入postgres表挂起

时间:2015-11-19 13:29:57

标签: python sql postgresql sqlalchemy sql-insert

我有一个试图将大量行插入postgresql表的脚本。当我说大的时候,我的意思是高达200,000。我正在使用sql炼金术从python插入数据。每行由一个唯一ID和多个0/1标志组成。

当我尝试插入少量行时,它可以正常工作。我甚至没有任何问题地插入了大约18,000个,我认为它只花了几秒钟。

最近,我已经加强了尝试插入大约150,000条记录的更大数据集。我的脚本打印了它开始执行此操作的时间,此插件已经运行了12个多小时。与快速20k行插入相比,它似乎不成比例地长。这是我正在使用的代码。

sql_engine = sqlalchemy.create_engine("postgresql://database")
meta=sqlalchemy.MetaData(sql_engine)
my_table= sqlalchemy.Table('table_name', meta, autoload=True, autoload_with=sql_engine)
already_inserted=[i for i in sql_engine.execute(sqlalchemy.select([some_column]))]
table_rows=[]
for i in summary:
    if i[some_column] not in alread_inserted:
        table_rows.append(
        {logic that builds row of 0s and 1s})
if len(table_rows)>0:
    my_table.insert().execute(table_rows)

有没有让这个工作的提示?我应该插入较小的块吗?如果我只是尝试插入等于1的标志并将零保留为null,那么插入会更快吗?

0 个答案:

没有答案