我有两个班级,TrialIdentifier和TimeCourse
TimeCourse 有一个包含 TrialIdentifier 的实例变量,我正在尝试在两者之间设置外键关系。
在 TrialIdentifier 中
__tablename__ = 'trial_identifiers'
relationships = relationship('TimeCourse',
back_populates = 'trial_identifier', uselist = False)
Run Code Online (Sandbox Code Playgroud)
在时间课程
__tablename__ = 'time_course'
trial_identifier_id = Column(Integer, ForeignKey('trial_identifiers.id'))
trial_identifier = relationship('TrialIdentifier', back_populates = 'relationships')`
Run Code Online (Sandbox Code Playgroud)
如果我trial_identifier在TimeCourse以下错误中命名变量,则会引发:
sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper|TimeCourse|time_course' has no property 'trial_identifier'
Run Code Online (Sandbox Code Playgroud)
如果我将其命名为其他任何名称,则一切正常。整个包都建立在 上,TimeCourse().trial_identifier所以如果可能的话,我想避免重构它。或者至少理解这种行为。
Trial_identifier 是一个私有变量,定义为_trial_identifier
删除 setter 和 getter,或者替换
trial_identifier = relationship('TrialIdentifier', back_populates = 'relationships')`
Run Code Online (Sandbox Code Playgroud)
和
_trial_identifier = relationship('TrialIdentifier', back_populates = 'relationships')`
Run Code Online (Sandbox Code Playgroud)
解决了问题
另外,您可以使用替代方法来解决此问题。只需使用backref而不是back_populates. 这个对我有用:
在时间课程中:
trial_identifier = relationship('TrialIdentifiers', backref = 'time_course')
Run Code Online (Sandbox Code Playgroud)
您可以在 SQLAlchemy 文档中找到更多信息。
| 归档时间: |
|
| 查看次数: |
10991 次 |
| 最近记录: |