SQLalchemy建立类之间的关系

时间:2020-06-12 15:58:08

标签: python flask sqlalchemy flask-sqlalchemy

我遇到了一个我不知道如何解决的概念性问题,这可能是由于我对SQLalchemy缺乏了解。我有两个类:PeoplePerson,我希望他们每个人都有一个列,以使用关系函数彼此共享各自的ID。
现在,我在views.py中有一个端点,该端点实例化了这两个类并建立了子级/父级关系。但是,从数据库结果来看,只有People的父类的ID存储在其各自的表中,而列Person中的people表则为None。
我知道person中的ID仅在commit()语句之后生成,因此Person为None,并且想知道是否有一种方法可以优雅地解决此问题,还是我需要首先查询当前的people实例,获取其ID,在person表中设置ID,然后再次commit()
希望我的问题有意义,谢谢。

'''
   model.py
'''

class People(Model):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    person = relationship('Person', back_populates='people')
    person_id = Column(Integer, ForeignKey('people.id'))

class Person(Model):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    people = relationship('People', uselist=False, back_populates='person')
'''
   views.py
'''
@main.route('/', methods=['GET', 'POST'])
def index():
    people = People()
    person = Person(people_id = ?)

    people.person = person

    session.add(person)
    session.add(people)
    session.commit()

2 个答案:

答案 0 :(得分:1)

很遗憾,我尚未理解您的问题。但是,由于您的代码包含一些错误,因此我将首先为您编写我的更正变体。

class People(Model):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True)
    person = relationship('Person', back_populates='people')
    person_id = Column(Integer, ForeignKey('person.id'))

class Person(Model):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    people = relationship('People', back_populates='person')

def index():
    person = Person()
    people = People()
    people.person = person

    session.add(person)
    session.add(people)
    session.commit()

对我来说,奇特的问题似乎是合理的。将这两个表中的ForeignKey保存在另一个模型的引用标识符上是没有意义的。

您想实现什么?

答案 1 :(得分:1)

如果您正在数据库中查找“关系”的实际列,则不会找到它们。您的.people和.person是在Python中创建的虚拟关系,无需与SQL数据库进行任何交互。

相关问题