#sqlalchemy
#sqlalchemy
Вопрос:
запрос = Test() setattr(запрос, 'test', 1); session.add(запрос) печать req.id
Как получить последний идентификатор для объекта req?
Ответ №1:
Вы должны зафиксировать его первым (после session.add(req)
).
Комментарии:
1. но я хочу вставить req.id в другой таблице в одной транзакции.
2. Тогда вам следует использовать макет реляционной базы данных. Прочитайте это руководство . Конечно, вы могли бы попытаться выбрать максимальный индекс в таблице (
SELECT MAX(id) FROM table
), индекс вашего объекта должен быть равен этому максимальному индексу 1, однако это не совсем безопасно — это может вызвать состояние гонки (представьте, что одновременно выполняются 2 подобных скрипта).
Ответ №2:
flush () достаточно, он выполнит запросы и заполнит автоматические идентификаторы.
Ответ №3:
Если вы выполняете session.commit() перед окончательной операцией печати, атрибут id будет установлен. Как написано, у движка нет причин выполнять какие-либо SQL-запросы, поэтому объект еще не был вставлен. Как только запрос будет выполнен (при сбросе сеанса или фиксации), идентификатор будет там.