sqlalchemy и идентификатор последней вставки

#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-запросы, поэтому объект еще не был вставлен. Как только запрос будет выполнен (при сбросе сеанса или фиксации), идентификатор будет там.