Погрешность PostgreSQL Sqlalchemy занимает много времени

Когда я пытаюсь внести изменения в таблицу, это занимает много времени (около 300 секунд на каждые 1000 строк).

Класс модели:

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)

У меня около 100k строк. В начале я создал сеанс, затем добавляю новую строку в сеанс на каждой итерации цикла for. Я вызываю метод .commit () каждый 1000 строк и занимает около 300 секунд. Мне кажется слишком медленным. Все в порядке или есть другой (правильный) способ вставить такой большой набор данных в базу данных.

0
задан Ilja Everilä 13 August 2018 в 11:47
поделиться

1 ответ

Чтобы увеличить производительность, вы можете использовать bulk_save_method, он выглядит наиболее быстрым.

Вы можете проверить производительность http://docs.sqlalchemy.org/en/latest/faq/performance.html#im-inserting -400-000-строка-с-ОРМ-и-это s-очень-медленно

0
ответ дан Rafał 15 August 2018 в 14:02
поделиться
  • 1
    просто попробовал и получил 284,24 секунды с bulk_save_objects () – bigEvilBanana 13 August 2018 в 13:14
  • 2
    можете ли вы предоставить код, в котором вы использовали bulk_save_method? – Rafał 13 August 2018 в 14:21

Другие вопросы по тегам:

Похожие вопросы: