Я изучаю бэкэнд-разработку на python, используя флак и SQLachemy.Я понял, как делать отношения один-к-одному, один-ко-многим и многие-ко-многим.И теперь я пытаюсь сделать более сложные отношения.
Есть 3 класса моделей с этими отношениями:
- Классы A и B имеют отношение один к одному
- Классы B и C имеют отношения многих (B)-к-одному (C)
- Классы A и C имеют отношения многих (C)-к-одному (A)
И теперь я хочу создать связь между C и A, передавая хотя бы связь B (абстрактная формулировка проблемы, продолжить чтение для конкретной формулировки)
В документации говорится о join
,это может быть способ сделать это, но я не могу понять пример https://docs.sqlalchemy.org/en/13/orm/join_conditions.html#composite-secondary-joins
from backend import db # db = SQLAlchemy(app)
class User(db.Model): # class A
__tablename__ = 'User'
id = db.Column(db.Integer, primary_key=True)
# ...
albums = db.relationship('Album', backref='auteur')
# pictures taken as a photograph (pictures_posted may exist, but
# that's still the same difficulty than with photographer, "circular"
# relationships
pictures_taken = db.relationship('Picture', backref='photographe')
class Picture(db.Model): # class B
__tablename__ = 'Picture'
id = db.Column(db.Integer, primary_key=True)
# ...
album_id = db.Column(db.Integer, db.ForeignKey('Album.id'))
photographe_id = db.Column(db.Integer, db.ForeignKey('User.id'))
class Album(db.Model): # class C
__tablename__ = 'Album'
id = db.Column(db.Integer, primary_key=True)
# ...
pictures = db.relationship('Picture', backref='album')
auteur_id = db.Column(db.Integer, db.ForeignKey('User.id'))
Чтобы быть менее абстрактным, я хочу получить доступ (все) photographes
, которые представлены в album
, непосредственно из album
экземпляров.Как я могу получить доступ к auteur
и pictures
.
PS: Должен ли я использовать полиморфизм для решения проблемы (подклассы пользователя: лямбда; фотограф; автор)?