Sqlalchemy orm стратегии _load_for_state занимают огромное количество времени - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть приложение, которое работает очень быстро.Допустим, для запуска потребовалось 10 секунд.Все, что он делает, это читает CSV, анализирует его и сохраняет некоторую информацию в объектах sqlalchemy, которые записываются в базу данных.(Мы никогда не пытаемся читать базу данных, только для записи).

После добавления отношения многие ко многим к объекту, который мы строим, и привязки его к объекту адреса, который мы сейчас строим, время для обработкиФайл увеличился на порядок.Мы делаем очень мало дополнительной работы: просто создаем экземпляр адреса и сохраняем его в коллекции отношений на нашей сущности, используя append.

Большая часть времени, по-видимому, теряется в _load_for_state, как видно из прикрепленногоскриншот профилирования: enter image description here

Я почти уверен, что это ненужное потерянное время, потому что похоже, что оно пытается выполнить некоторую загрузку, даже если мы никогда не делаем запросы к базе данных(мы всегда создаем новые объекты и сохраняем их в этом приложении).

У кого-нибудь есть идеи, как оптимизировать sqlalchemy здесь?

update

Iпопытался установить SQLALCHEMY_ECHO = True просто чтобы посмотреть, выполняет ли он кучу операций чтения из базы данных, или, может быть, какие-то дополнительные записи.Как ни странно, он обращается к самой базе данных только в то же время, что и раньше (после db.session.commit()).Я уверен, что все это дополнительное время не тратится из-за доступа к базе данных.

...