我正在尝试使用混合属性作为外键。在我的Transaction班级中,我有以下混合属性:
@hybrid_property
def target_id(self):
return self.data_manual.target_id or self.data_inferred.target_id
@target_id.expression
def target_id(cls):
coalesce(
select([TransactionManual.target_id]).where(cls.id == TransactionManual.id).as_scalar(),
select([TransactionInferred.target_id]).where(cls.id == TransactionInferred.id).as_scalar())
Run Code Online (Sandbox Code Playgroud)
如果 是transaction_id自动设置的,则存储在TransactionInferred的表中,如果由用户手动设置,则存储在TransactionManual的表中(TransactionInferred并且与TransactionManual具有相同的 id Transaction)。手动值优先于自动值。
我原本只是有
@property
def target():
Target.query.filter(Target.id == self.target_id).first()
Run Code Online (Sandbox Code Playgroud)
它有效,但我不能在查询中使用它。
我试过了
target = db.relationship(Target, foreign_keys='Transaction.target_id', primaryjoin='Transaction.target_id == Target.id')
Run Code Online (Sandbox Code Playgroud)
以及它的几十个变体,但没有一个起作用。SQLAlchemy 通常会抱怨没有链接表的外键。
任何帮助将不胜感激,谢谢!
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |