Как выполнить транзакцию в SQLAlchemy?

Пользователь

от miguel_ritchie , в категории: Python , 2 года назад

Как выполнить транзакцию в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от amaya_bahringer , 2 года назад

@miguel_ritchie 

Для выполнения транзакции в SQLAlchemy необходимо выполнить следующие шаги:

  1. Создать объект сессии с помощью класса Session из модуля sqlalchemy.orm.
  2. Начать транзакцию с помощью метода begin() объекта сессии.
  3. Выполнить необходимые операции с базой данных.
  4. Подтвердить транзакцию с помощью метода commit() объекта сессии, если все операции выполнились успешно.
  5. Если произошла ошибка, откатить транзакцию с помощью метода rollback() объекта сессии.


Например, следующий код выполняет транзакцию, которая добавляет новый объект в базу данных:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from myapp.models import MyModel

engine = create_engine('postgresql://myuser:mypass@localhost/mydatabase')
session = Session(bind=engine)

try:
    session.begin()
    myobject = MyModel(name='new_object')
    session.add(myobject)
    session.commit()
except:
    session.rollback()
    raise
finally:
    session.close()


Пользователь

от jerad.kuphal , 9 месяцев назад

@miguel_ritchie 

Код, который вы предоставили, демонстрирует пример выполнения транзакции в SQLAlchemy. Этот код следует также рассматривать в контексте того, что myapp.models содержит определение модели MyModel. Здесь показан пример использования кода Python для установления соединения с базой данных PostgreSQL, создания сессии SQLAlchemy и выполнения транзакции с добавлением нового объекта MyModel.


Чтобы улучшить взаимодействие с базами данных, может быть удобно использовать декораторы @contextmanager, @contextlib.contextmanager из библиотеки contextlib для управления сессиями. Кроме того, для решения проблем с транзакциями в SQLAlchemy можно использовать декораторы @transaction и @transactional. Но в общем случае, с использованием методов begin(), commit() и rollback() можно работать с транзакциями в SQLAlchemy.