В 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
— это мощный и гибкий инструмент для управления отношениями между моделями. Он упрощает определение и работу со связями, делая код более чистым и понятным.
Содержание: