SQLAlchemy insert>1M行进程已终止

2024-09-25 00:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码在一个SQL表中插入超过1M的条目(ItemOrderType位是因为我认为我在使用SQLAlchemy的decl enum recipe从另一个源写入条目时出错…)

def run_import():
    with open('listings.csv', 'r') as csv_file:
        reader = csv.reader(csv_file, delimiter=";")
        inserts = []
        for row in reader:
            inserts.append({'item_id': int(row[0]),
                            'order_type': ItemOrderType.from_string(row[1].replace('<','').replace('>','')),
                            'listings': int(row[2]),
                            'unit_price': int(row[3]),
                            'quantity': int(row[4])})

            if len(inserts) == 10000:
                db.engine.execute(ItemOrder.__table__.insert(), inserts)
                inserts = []
        db.engine.execute(ItemOrder.__table__.insert(), inserts)

不管怎样,如果没有len(inserts)技巧,插入甚至不会发生,进程只返回一条消息“Killed”。有了它,在它被杀之前我得到了大约75万张唱片。在

当监控top中的进程时,我发现VIRT内存在被杀死之前已经上升到了1200m左右,res保持在230m左右

这是sqlalchemy的漏洞吗?我假设在引擎执行插入后,使用的任何内存都是release?在

这是我在Archlinux上使用的python版本: Python2.7.6(默认值,2014年5月26日,10:25:14) [GCC 4.4.7 20120313(Red Hat 4.4.7-4)]关于linux2

提前谢谢!在


Tags: csvexecutedblen条目enginereplacereader