Я пытался воспользоваться функцией отката в 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
в моем коде?