Как получить доступ к значению автоинкремента после фиксации объекта

Я использую flask-sqlalchemy. Мой класс:

class Game(db.Model):
    userid = db.Column(db.Integer, primary_key=True)
    gameid = db.Column(db.Integer, primary_key=True)

gameid в базе данных настроен на автоматическое приращение.

Когда я запускаю эту функцию:

@app.route("/requestgame")
def requestgame():
    game = Game()
    game.userid = session["userid"]
    db.session.add(game)
    db.session.commit()
    session["gameid"] = game.gameid
    return "gameid {}".format(game.gameid)

Я получаю сообщение «ObjectDeletedError: Instance» был удален или его строка отсутствует ».

Как мне вернуть gameid?

Похоже, здесь кто-то задал тот же вопрос об обычном SQLAlchemy: SQLAlchemy Obtain Primary Ключ с автоинкрементом перед фиксацией, но я попробовал рекомендованное решение (вызов session.flush()), и это, похоже, не имеет никакого значения.


person matthewk    schedule 02.02.2014    source источник
comment
Вы имеете в виду, что пробовали db.sessions.flush(), верно?   -  person Paolo Casciello    schedule 03.02.2014
comment
Нет, db.session.flush(). db.sessions.flush() выдает ошибку "AttributeError: 'SQLAlchemy' object has no attribute 'sessions'".   -  person matthewk    schedule 03.02.2014
comment
Я думаю, у вас проблема, потому что у вас есть два столбца, отмеченные как первичный ключ.   -  person Dmitry Vakhrushev    schedule 03.02.2014
comment
Почему? packages.python.org/Flask-SQLAlchemy/models.html говорит, что несколько ключей могут быть помечены как первичные ключи, и в этом случае они становятся составным первичным ключом.   -  person matthewk    schedule 03.02.2014
comment
автоинкремент в базах данных обычно применяется к целочисленному первичному ключу из одного столбца. если у вас есть составной ключ, правила автоинкремента различаются в зависимости от платформы (например, sqlite полностью удаляется), но если у вас нет явных используемых объектов SEQUENCE, для auto все равно будет максимум одного столбца.   -  person zzzeek    schedule 10.02.2014