我遇到了一个我不知道如何解决的概念性问题,这可能是由于我对SQLalchemy缺乏了解。我有两个类:People
和Person
,我希望他们每个人都有一个列,以使用关系函数彼此共享各自的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()
答案 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数据库进行任何交互。