
В SQLAlchemy
backref— это удобный способ создания двунаправленных отношений между моделями.
Он позволяет нам не только определить отношение от одной модели к другой, но и обратно, без необходимости явно указывать это отношение в обеих моделях.
Допустим, у нас есть две модели: User и Post. Каждый Post принадлежит одному User.
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
title = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship('User', backref='posts')Здесь relationship указывает, что у Post есть отношение к User. backref='posts' создает обратное отношение, добавляя атрибут posts к модели User, который представляет собой список всех связанных записей Post.
User для записей Post.backref, связанные объекты можно легко добавлять или удалять из обоих сторон отношения.Допустим, у нас есть пользователь и мы хотим добавить ему новую запись:
user = User(name="Alex")
post = Post(title="My first post!")
user.posts.append(post)
session.add(user)
session.commit()Также мы можем легко получить автора записи и наоборот:
post_author = post.user
user_posts = user.postsВ SQLAlchemy backref — это мощный и гибкий инструмент для управления отношениями между моделями. Он упрощает определение и работу со связями, делая код более чистым и понятным.
Содержание: