SQLAlchemy lazy sa.select([])

SQLAlchemy lazy sa.select([]),sqlalchemy,python-3.7,Sqlalchemy,Python 3.7,我使用列属性引用其他表的属性。 我希望能够独立于模型的声明顺序从其他模型中选择任意信息。 就像sa.orm.relationship通过字符串声明其关系一样 我面临的问题是,a的property\u无法初始化,因为此时未声明ModelB 下面是一个简化(不起作用)的示例 此示例的工作替代方案可能使用 我不认为我可以使用关联代理,因为我希望能够使用CONCAT、GROUP\u-CONCAT和IF-THEN-ELSE查询 是否有方法初始化sa.select查询延迟(例如通过sa.orm.relati

我使用列属性引用其他表的属性。 我希望能够独立于模型的声明顺序从其他模型中选择任意信息。 就像
sa.orm.relationship
通过字符串声明其关系一样

我面临的问题是,a的
property\u
无法初始化,因为此时未声明
ModelB

下面是一个简化(不起作用)的示例

此示例的工作替代方案可能使用 我不认为我可以使用关联代理,因为我希望能够使用
CONCAT
GROUP\u-CONCAT
IF-THEN-ELSE
查询

是否有方法初始化sa.select查询延迟(例如通过
sa.orm.relationship
之类的字符串)


嗨,你有没有想过这个问题?我还没有找到一个懒惰的解决方案,但是你可以通过
ModelA.property\u of_a=sa.orm.column\u属性(sa.select([ModelB.name]).where(ModelB.id==model\u b\u id))
sa.orm.configure\u mappers()之前实现同样的效果
import sqlalchemy as sa

Base = sa.ext.declarative.declarative_base()
metadata = Base.metadata

class ModelA(Base):
  __tablename__ = "model_a_table"

  id = sa.Column(sa.Integer, primary_key=True)
  name = sa.Column(sa.String(255), nullable=False, unique=True)

  model_b_id = sa.Column(sa.ForeignKey('model_b_table.id', ondelete='SET NULL'), index=True)
  model_b = sa.orm.relationship("ModelB")

  property_of_a = sa.orm.column_property(sa.select([ModelB.name]).where(ModelB.id == model_b_id))

class ModelB(Base):
  __tablename__ = "model_b_table"

  id = sa.Column(sa.Integer, primary_key=True)
  name = sa.Column(sa.String(255), nullable=False, unique=True)

  model_a_id = sa.Column(sa.ForeignKey('model_a_table.id', ondelete='SET NULL'), index=True)
  model_b = sa.orm.relationship("ModelA")

  property_of_b = sa.orm.column_property(sa.select([ModelA.name]).where(ModelB.id == model_a_id))

sa.orm.configure_mappers()