Получить последнее вставленное значение из MySQL с помощью SQLAlchemy

Я только что столкнулся с довольно неприятной проблемой, и после тестирования я обнаружил, что НИ ОДИН из доступных ответов не является достаточным.

Я видел различные предложения, но, похоже, ни одно из них не могло вернуть последнее вставленное значение для поля 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 на основе других параметров, но я бы предпочел не делать этого, если это вообще возможно.

Я был бы очень признателен за любое понимание решения этой проблемы.

Заранее благодарю за помощь.

6
задан PlaidFan 21 December 2011 в 05:19
поделиться