PostgreSQL Sqlalchemy提交花费很多时间

时间:2018-08-13 11:35:40

标签: python postgresql sqlalchemy

当我尝试将更改提交到表中时,它花费了大量时间(每1000行约300秒)。

模型类:

class Quotes(base):
    __tablename__ = 'quotes'

    id = Column(INTEGER, primary_key=True, autoincrement=True, index=True)
    ticker = Column(TEXT)
    data = Column(ARRAY(FLOAT))


    def create():
        Session = sessionmaker(db)
        session = Session()
        return session


    def add(session, ticker=None, data=None):
        new_row = Quotes(ticker=ticker, data=data)
        session.add(new_row)

    def commit(session):
        t0 = time.time()
        session.commit()
        print("SQLAlchemy ORM commit(): Total time " + str(time.time() - t0) + " secs")

代码如下:

        for index in range(len(quotes['timestamp'])):
        temp = [
            int(quotes['timestamp'][index]), quotes['open'][index],
            quotes['high'][index], quotes['low'][index],
            quotes['close'][index]
        ]
        Quotes.add(session, ticker, temp)
        counter += 1

        if counter % 1000 == 0:
            Quotes.commit(session)

我大约有10万行。 首先,我创建了一个会话,然后在for循环的每次迭代中将新行添加到会话中。 我每1000行调用一次.commit()方法,这大约需要300秒。 对我来说似乎太慢了。可以吗,或者还有另一种(正确的)方法可以将如此大的数据集插入数据库。

1 个答案:

答案 0 :(得分:0)

要提高性能,您可以使用bulk_save_method,它看起来最快。

您可以检查效果http://docs.sqlalchemy.org/en/latest/faq/performance.html#i-m-inserting-400-000-rows-with-the-orm-and-it-s-really-slow