Откат транзакции sqlalchemy - PullRequest
0 голосов
/ 28 мая 2020

Я пытался воспользоваться функцией отката в sqlalchemy для выполнения следующего кода:

engine.begin()
    try:
        with engine.connect() as con:       
            for i, query in enumerate(queries):
                con.execute(query)
    except Exception as e:
        print("Database Error: Rolling back transactions")
        engine.rollback()

Этот код должен выполнять все запросы в списке queries. и если запрос i не может быть выполнен, запросы от 0 до i-1 будут отменены, и l oop будет существовать. Этот код взят на основе фрагмента , найденного в официальной документации :

Явное выполнение может быть смешано с выполнением без установления соединения с помощью метода Engine.connect () для получения соединения это не часть области threadlocal:

db.begin()
conn = db.connect()
try:
    conn.execute(log_table.insert(), message="Operation started")
    call_operation1()
    call_operation2()
    db.commit()
    conn.execute(log_table.insert(), message="Operation succeeded")
except:
    db.rollback()
    conn.execute(log_table.insert(), message="Operation failed")
finally:
    conn.close()

Я думал, что мой код реплицирует ту же процедуру из фрагмента документации. Однако, когда я выполняю свой код, появляется сообщение об ошибке: AttributeError: 'Engine' object has no attribute 'rollback'

Кажется, что в sqlalchemy.engine.Engine нет метода с именем rollback. Кто-нибудь знает, почему это происходит? отличается ли атрибут db в документации от engine в моем коде?

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