Я обнаружил, что этот код стал узким местом, так как моя таблица 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?