Как реализовать отношения многие ко многим, используя flask sqlalchemy? - PullRequest
0 голосов
/ 31 марта 2020

Привет, я новичок в flask sqlalchemy, особенно когда речь идет о модели отношений, может ли кто-нибудь помочь мне, какова концепция модели отношения многих ко многим. Мой пример использования: у пользователя может быть несколько групп, а в группах может быть несколько пользователей. Правильно ли я корректирую отношения с этой моделью отношений «многие ко многим»? Или другие модели, основанные на моем примере использования? Я уже искал много об этом, но я не полностью понимаю концепцию и реализацию. Заранее спасибо: -)

1 Ответ

0 голосов
/ 31 марта 2020

Да, это считается отношением «многие ко многим» в вашем сценарии. Например, рассмотрим базу данных, в которой есть пользователь и группа. Можно сказать, что у пользователя много групп, а у группы много пользователей. Это как перекрывающиеся отношения «один ко многим» с обеих сторон. Это на самом деле нетривиально для представления в реляционной базе данных, и это не может быть сделано путем простого добавления внешних ключей в существующие таблицы. Для этого вам потребуется дополнительная таблица, выступающая в роли промежуточного / вспомогательного, где хранится первичный ключ обеих таблиц.

Вот некоторая реализация, использующая Flask -Sqlalchemy

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////tmp/test.db"
db = SQLAlchemy(app)

# act as auxiliary table for user and group table
user_groups = db.Table(
    "user_groups",
    db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
    db.Column("group_id", db.Integer, db.ForeignKey("group.id")),
)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    groups = db.relationship("Group", secondary=user_groups, back_populates="users")


class Group(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), nullable=False)
    users = db.relationship("User", secondary=user_groups, back_populates="groups")

для получения дополнительной справки: https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html Как построить отношения многие ко многим, используя SQLAlchemy: хороший пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...