如何使用Flask-SQLAlchemy在两个表之间创建多对多关系

时间:2019-12-05 03:55:24

标签: python flask sqlalchemy flask-sqlalchemy

我有用户和论坛表。用户在许多论坛中做出了贡献,而论坛中有许多用户

我的数据库表

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 |
+---------+----------+

2 个答案:

答案 0 :(得分:0)

在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

了解更多

答案 1 :(得分:0)

Ref-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>]