在提交会话之前获取插入的密钥

发布于 2021-01-29 16:39:36

class Parent(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class Child(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))

parent = Parent()
db.session.add(parent)

child = Child()
child.parent_id = parent.id
db.session.add(child)

db.session.commit()

我想 INSERT
到两个parentchild表考虑到一个会话中parent_id必须包含在该child表中。在创建child对象的那一刻,它parent.id
None

我该如何实现?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用flush()刷新对数据库的更改,从而更新您的主键字段:

    parent = Parent()
    db.session.add(parent)
    db.session.flush()
    
    print parent.id  # after flush(), parent object would be automatically
                     # assigned with a unique primary key to its id field
    
    child = Child()
    child.parent_id = parent.id
    db.session.add(child)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看