Я только что столкнулся с довольно неприятной проблемой, и после тестирования я обнаружил, что НИКАКОГО из доступных ответов не достаточно.
Я видел различные предложения, но ни одно из них не может вернуть последнее вставленное значение для поля auto_increment в MySQL.
Я видел примеры, в которых упоминается использование session.flush () для добавления записи и затем получения идентификатора. Однако, кажется, всегда возвращается 0.
Я также видел примеры, в которых упоминается использование session.refresh (), но возникает следующая ошибка: InvalidRequestError: Не удалось обновить экземпляр ''
То, что я пытаюсь сделать, кажется безумно простым, но я, похоже, не могу разгадать секрет.
Я использую декларативный подход.
Итак, мой код выглядит примерно так:
class Foo(Base):
__tablename__ = 'tblfoo'
__table_args__ = {'mysql_engine':'InnoDB'}
ModelID = Column(INTEGER(unsigned=True), default=0, primary_key=True, autoincrement=True)
ModelName = Column(Unicode(255), nullable=True, index=True)
ModelMemo = Column(Unicode(255), nullable=True)
f = Foo(ModelName='Bar', ModelMemo='Foo')
session.add(f)
session.flush()
В этот момент объект f был помещен в БД, и ему автоматически был присвоен уникальный идентификатор первичного ключа. Тем не менее, я не могу найти способ получить значение для использования в некоторых дополнительных операциях. Я хотел бы сделать следующее:
my_new_id = f.ModelID
Я знаю, что мог бы просто выполнить другой запрос для поиска ModelID на основе других параметров, но я бы предпочел этого не делать, если это вообще возможно.
Я был бы очень признателен за понимание этой проблемы.
Заранее спасибо за помощь.