Sqlalchemy 提交对象后如何访问自动增量值

Sqlalchemy 提交对象后如何访问自动增量值,sqlalchemy,flask,flask-sqlalchemy,Sqlalchemy,Flask,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.useri

我正在使用炼金术。我的班级是:

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:实例“”已被删除,或者其行不存在。”

我怎样才能让gameid返回

这里似乎有人问了同样的关于常规炼金术的问题:
但是我已经尝试了推荐的解决方案(调用
session.flush()
),似乎没有任何区别。

你的意思是你尝试了
db.sessions.flush()
,对吗?不,
db.session.flush()
db.sessions.flush()
给出错误
“AttributeError:'SQLAlchemy'对象没有属性'sessions'”
。我猜您遇到问题是因为有两列标记为主键。为什么?表示“多个键可以标记为主键,在这种情况下,它们将成为复合主键。”数据库中的自动增量通常应用于单列整数主键。如果您有一个复合键,“autoincrement”的规则因平台而异(例如sqlite,它会完全消失),但除非您使用了显式序列对象,否则“auto”的最大列数仍然只有一列。