如何打印关联表的结果



我有一个用户和一个分支表,它有多对多的关系。因此我定义了一个关联表。

user_branch_map = db.Table(
'user_branch_map',
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
db.Column('branch_id', db.Integer, db.ForeignKey('branch.id'), primary_key=True)
)

user_branch_map表包含以下内容:

#   user_id branch_id
1   3   1
2   1   2
3   1   1
4   1   3
5   1   4

我如何打印出user_branch_map的结果而不是id,而是用户和分支表的联接结果。我可以打印分支表信息,但我也需要用户信息。我试过以下几种方法:

def get(self):
# maptable= User.query.join(user_branch_map).join(Branch). 
# filter((user_branch_map.c.user_id == User.id) & (user_branch_map.c.branch_id == Branch.id)).all()
# print(type(maptable))
# # maptable = db.session.query(user_branch_map).join(User).all()
# # print(maptable)
# for row in maptable:
#     print(row)

# branches = db.session.query(Branch).all()
# q = db.session.query(User).options(eagerload(User.branches))
# for u in q.all():
#     for c in branches:
#         print (c.id, c.name,(c in u.branches))
q = db.session.query(user_branch_map).join(Branch).join(User).all()
print(q)

db.session.query(User.id,User.full_name,Branch.id,Branch.name(.filter(User_Branch_map.c.User_id==User.id(.filtr(User_bran ch_map.b.Branch_id==Branch.id(

我想你想得到每个用户的分支,所以像username, branchname这样的东西应该允许你从那里扩展它。如果您将用户模型定义为

class User(db.Model):
...
branches = db.relationship("Branch", secondary=user_branch_map, backref="users")
...

然后您只需要将User连接到Branch,然后SQLAlchemy将完成剩下的工作:

q = q = db.session.query(User.username, Branch.branch_name).select_from(User).join(user_branch_map).join(Branch).all()

这应该会生成以下SQL:

SELECT user.username, branch.branch_name
FROM user
JOIN user_branch_map ON user.id = user_id
JOIN branch ON branch.id = branch_id

使用backref="users"还应该使Branch上的users属性可用(请参阅文档(

相关内容

  • 没有找到相关文章

最新更新