sqlalchemy назначающий атрибут фиксирует изменения - PullRequest
0 голосов
/ 01 марта 2019

Я обнаружил, что этот код стал узким местом, так как моя таблица sql стала довольно большой (2 млн строк).

def somefunc():
    for row in df.iterrows():
        updates = session.query(User).filter(User.id == id)

        try:
            somefunc()

            for update in updates:
                update.flag = 1

        except:
            for update in updates:
                update.flag = 0

    session.commit()

вопрос 1 : я проверил это в блокноте Юпитера и похоже, что транзакция совершается в точке назначения атрибута,

for update in updates:
    update.flag = 1

в то время какЯ ожидал, что транзакция сбрасывается в БД на session.commit(), почему?Это приводит к тому, что sql выполняет запрос на каждой итерации цикла, что смертельно.

question 2 : как я могу предотвратить ожидание, пока sql выполнит запрос.Я пробовал session.flush(), но это не помогает.И если это не разрушит сессию или базу данных в конце концов, если запросы находятся в очереди для выполнения mysql?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...