【问题标题】:How to create many to many relationship between two tables using Flask-SQLAlchemy如何使用 Flask-SQLAlchemy 在两个表之间创建多对多关系
【发布时间】:2019-12-05 03:55:24
【问题描述】:

我有用户和论坛表。用户在很多论坛上贡献过,论坛有很多用户

我的数据库表

users
+----+------------+
| id |    name    |
+----+------------+
|  1 | user_one   |
|  2 | user_two   |
|  3 | user_three |
+----+------------+ 
forums
+----+--------+
| id |  name  |
+----+--------+
|  1 | forum1 |
|  2 | forum2 |
|  3 | forum3 |
+----+--------+
users_forums
+---------+----------+
| user_id | forum_id |
+---------+----------+
|       1 |        1 |
|       1 |        3 |
|       3 |        2 |
|       2 |        1 |
+---------+----------+

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    参考 - https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html#many-to-many.

    您可以创建 UserForum 模型或 users_forums 表来传递关系中的辅助选项。

    from flask_sqlalchemy import SQLAlchemy
    from sqlalchemy import Column, Integer, String, ForeignKey
    from sqlalchemy.orm import relationship
    
    db = SQLAlchemy()
    
    class User(db.Model):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(String(24))
    
        forums = relationship("Forum", secondary='users_forums')
    
    class Forum(db.Model):
        __tablename__ = 'forums'
        id = Column(Integer, primary_key=True)
        name = Column(String(24))
    
        users = relationship("User", secondary='users_forums')
    
    class UserForum(db.Model):
        __tablename__ = 'users_forums'
        user_id = Column(Integer, ForeignKey('users.id'))
        forum_id = Column(Integer, ForeignKey('forums.id'))
    

    如下使用

    user = User.query.get(1)
    print(user)
    <User 1>
    
    forums = user.forums
    print(forums)
    [<Forum 1>, <Forum 2>]
    

    【讨论】:

      【解决方案2】:

      在您的 SQLAlchemy UserModel 中,您需要使用如下关系:

          forum_id = db.Column(db.Integer, db.ForeignKey("forum.id"), nullable=False)
          forum = db.relationship("ForumModel")
      

      然后在您的 ForumModel 中将它们与以下内容链接:

          users = db.relationship("UserModel", lazy="dynamic")
      

      在此处阅读更多信息https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/#many-to-many-relationships

      【讨论】:

        猜你喜欢
        • 2019-01-12
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 2019-08-24
        • 2020-08-03
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多