V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
MrAMS
V2EX  ›  Python

一个关于 flask sqlalchemy 多对多 多表查询 的问题,求教🙏

  •  
  •   MrAMS · 2019-02-10 16:44:36 +08:00 · 2306 次点击
    这是一个创建于 2111 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python Flask

    我想要实现这样一个功能,即返回用户关注的所有标签下的所有问题,并按照问题时间顺序排序。

    标签(Tag)与问题(Question)是多对多的关系,用户(User)与问题(Question)是一对多的关系

    我之前直接用的 db.Table 实现多对多,现在按照狗书将关联表改成了一个 FollowTag 模型,联结查询一直不怎么理解,请问该如何实现这个功能?模型与查询怎么写?感谢!🙏

    class FollowTag(db.Model):
        tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'),
                           primary_key=True)
        question_id = db.Column(db.Integer, db.ForeignKey('question.id'),
                                primary_key=True)
        create_time = db.Column(db.DateTime, default=datetime.utcnow)
    
    第 1 条附言  ·  2019-02-10 21:14:34 +08:00
    已解决,感谢诸位
    3 条回复    2019-02-10 21:12:04 +08:00
    BigBrother1024
        1
    BigBrother1024  
       2019-02-10 17:33:06 +08:00 via Android
    FollowTag 表需要 user_id
    gogobody
        2
    gogobody  
       2019-02-10 19:13:17 +08:00 via Android
    instances = db.session.query(Question).join( FollowTag, FollowTag.question_id=Question.id).join(Tag,Tag.id==FollowTag.tag_id).join(User,User.id==Tag.user_id).filter(User.id==查询用户 id)
    .....大学学得不好🤣,不知道这样有没有用
    MrAMS
        3
    MrAMS  
    OP
       2019-02-10 21:12:04 +08:00
    @gogobody 感谢,我已经解决了,这样就好了
    ```python
    query = db.session.query(Question)
    query = query.filter(Question.tags.any(Tag.users.any(User.id == self.id)))
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:05 · PVG 05:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.