以混合属性作为外键的关系

Ina*_*uma 5 python sqlalchemy

我正在尝试使用混合属性作为外键。在我的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 通常会抱怨没有链接表的外键。

任何帮助将不胜感激,谢谢!