我正在尝试在我有一对多表构造的情况下使用SQLAlchemy,但我基本上想要使用子查询在表之间创建一对一的映射。
例如
class User:
__tablename__='user'
userid = Column(Integer)
username = Column(String)
class Address:
__tablename__='address'
userid = Column(Integer)
address= Column(String)
type= Column(String)
在这种情况下,Address的type列包含“Home”,“Work”等字符串。我希望输出看起来像这样
我尝试使用子查询,我尝试了
session.query(Address).filter(Address.type =="Home").subquery("HomeAddress")
然后加入反对,但后来我失去了ORM“实体”映射。
如何在查询结果对象中保留ORM属性?
答案 0 :(得分:1)
您不需要使用子查询。连接条件不限于针对主键的外键:
home_address = aliased(Address, "home_address")
work_address = aliased(Address, "work_address")
session.query(User) \
.join(home_address, and_(User.userid == home_address.userid,
home_address.type == "Home")) \
.join(work_address, and_(User.userid == work_address.userid,
work_address.type == "Work")) \
.with_entities(User, home_address, work_address)