Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印关联表的结果_Python_Python 3.x_Flask_Flask Sqlalchemy_Flask Restful - Fatal编程技术网

Python 如何打印关联表的结果

Python 如何打印关联表的结果,python,python-3.x,flask,flask-sqlalchemy,flask-restful,Python,Python 3.x,Flask,Flask Sqlalchemy,Flask Restful,我有一个用户和一个分支表,它有多对多关系,因此我定义了一个关联表 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 = 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_id branch_id
1   3   1
2   1   2
3   1   1
4   1   3
5   1   4
我如何打印用户\分支\映射的结果不是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)

我猜您希望获得每个用户的分支,因此类似于
username,branchname
的东西应该允许您从那里扩展它。如果将用户模型定义为

类用户(db.Model):
...
Branchs=db.relationship(“Branch”,secondary=user\u Branch\u map,backref=“users”)
...
然后您只需将
用户
加入到
分支
,SQLAlchemy将完成其余工作:

q=q=db.session.query(User.username,Branch.Branch\u name)。从(User)中选择。加入(User\u Branch\u map)。加入(Branch).all()
这将生成以下SQL:

选择user.username、branch.branch\u name
来自用户
在user.id=user\u id上加入用户\u分支\u映射
在branch.id=branch\u id上加入分支

然后使用
backref=“users”
还应该使
Branch
上的
users
属性可用(参见)

db.session.query(User.id,User.full\u name,Branch.id,Branch.name)。过滤器(User\u Branch\u map.c.User\u id==User.id)。过滤器(User\u Branch\u map.c.Branch\u id==Branch.id)

我收到此错误
sqlalchemy.exc.InvalidRequestError:不知道如何加入。请使用.select\u from()方法建立一个显式的左侧,如果尚未出现,请提供一个explcit ON子句来帮助解决歧义。
尽管我是通过这样做得到结果的
maptable=db.session.query(User.id,User.full\u name,Branch.id,Branch.name).filter(user\u branch\u map.c.user\u id==user.id)。filter(user\u branch\u map.c.branch\u id==branch.id)
所以你没有使用我在回答中提到的
.join()
?你有什么原因吗?我试过你的方法,我得到了上面的错误。啊,我误解了。正如错误所说,您应该添加
。选择\u from()
q=db.session.query(User.username,Branch.Branch\u name)。从(User.join(Branch.all())中选择\u,是否有效?