SQLAlchemy 条件关系

问题描述 投票:0回答:1

我想在两个 ORM 对象之间建立一对多关系,并用第二个关系来扩展它,该关系在应用约束时链接到同一个“多”对象。

下面的例子可以详细说明:

class Users(SQLABase):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    addresses = relationship('Addresses', backref='user')


class Addresses(SQLABase):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    historic = (String(1))
    add1 = Column(String)
    user = Column(Integer, ForeignKey('users.id'))

我想要一个与相同“地址”表过滤相关的属性“Users.valid_addresses”,其中Addresses.historic ==“N”,如以下查询:

Session.Query(Addresses).filter_by(historic = 'N').all()

我正在寻找“SQLAlchemy 方式”。

  • 我可以对关系应用条件吗?
  • 我是否需要迭代当前关系的结果?
  • 我应该基于 SQL 创建一个额外的“valid_addresses”对象吗 应用条件的地址表视图?

我感觉这个问题已经得到了解答,但我未能正确表达问题。

python sqlalchemy
1个回答
18
投票

这在 SQLAlchemy 文档的“指定备用连接条件”下有所介绍。

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    boston_addresses = relationship("Address",
                    primaryjoin="and_(User.id==Address.user_id, "
                        "Address.city=='Boston')")

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('user.id'))

    street = Column(String)
    city = Column(String)
    state = Column(String)
    zip = Column(String)
© www.soinside.com 2019 - 2024. All rights reserved.