推荐学习书目
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 · Feb 10, 2019 · 3042 views
    This topic created in 2662 days ago, the information mentioned may be changed or developed.

    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)
    
    Supplement 1  ·  Feb 10, 2019
    已解决,感谢诸位
    3 replies    2019-02-10 21:12:04 +08:00
    jmperdev
        1
    jmperdev  
       Feb 10, 2019 via Android
    FollowTag 表需要 user_id
    gogobody
        2
    gogobody  
       Feb 10, 2019 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
       Feb 10, 2019
    @gogobody 感谢,我已经解决了,这样就好了
    ```python
    query = db.session.query(Question)
    query = query.filter(Question.tags.any(Tag.users.any(User.id == self.id)))
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5262 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    ♥ Do have faith in what you're doing.