我有2个表:用户和组
类声明如下:
class Groups(Base):
__tablename__ = 'groups'
group_id = Column(Integer, primary_key=True)
group_name = Column(Unicode(32))
user = relationship('User')
class User(Base):
__tablename__ = 'user'
user_id = Column(Integer, primary_key=True)
name = Column(Unicode(64))
email = Column(Unicode(64))
group_id = Column(Integer, ForeignKey('groups.group_id'))
因此,组ID可以附加多个user_id。
现在,我正试图像这样查询上面的表格:
user_list_incomplete1 = DBSession.query(User.name, User.user_id, Groups.group_name).filter(User.group_id == Groups.group_id).order_by(User.user_id).all()
该查询适用于那些声明了组ID的用户,但如果该字段为空则不返回任何内容(空列表)。
即使对于那些没有组ID的用户行,我应该如何编写查询以获取数据?
答案 0 :(得分:0)
您定义的关系默认会生成inner join。你想要的是outer join
类似的东西:
user_list_incomplete1 = DBSession.query(User.name, User.user_id, Groups.group_name)\
.outerjoin(Groups)\
.filter()... etc
有意义吗?无论是否存在外键匹配,外连接都将显示两个表的所有记录。