Я только что столкнулся с довольно неприятной проблемой, и после тестирования я обнаружил, что НИ ОДИН из доступных ответов не является достаточным.
Я видел различные предложения, но, похоже, ни одно из них не могло вернуть последнее вставленное значение для поля auto_increment в MySQL.
Я видел примеры, в которых упоминается использование session.flush () для добавления записи и последующего получения идентификатора. Однако кажется, что это всегда возвращает 0.
Я также видел примеры, в которых упоминается использование session.refresh (), но это вызывает следующую ошибку: InvalidRequestError: не удалось обновить экземпляр »
Что я пытаюсь сделать do кажется безумно простым, но я не могу разгадать секрет.
Я использую декларативный подход.
Итак, мой код выглядит примерно так:
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 на основе других параметров, но я бы предпочел не делать этого, если это вообще возможно.
Я был бы очень признателен за любое понимание решения этой проблемы.
Заранее благодарю за помощь.