我有一个用户和一个分支表,它有多对多的关系。因此我定义了一个关联表。
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
属性可用(请参阅文档(