Как создать связь между моделями в SQLAlchemy?

Пользователь

от nikko , в категории: Python , 2 года назад

Как создать связь между моделями в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от elda , год назад

@nikko 

В SQLAlchemy связь между моделями можно создать с помощью различных типов отношений, таких как One-to-One, One-to-Many и Many-to-Many.


Пример создания отношения One-to-One:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import 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 UserProfile(Base):
    __tablename__ = 'user_profiles'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship("User", uselist=False, back_populates="profile")
    address = Column(String)

User.profile = relationship("UserProfile", uselist=False, back_populates="user")


Пример создания отношения One-to-Many:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Author(Base):
    __tablename__ = 'authors'
    id = Column(Integer, primary_key=True)
    name = Column(String)

class Book(Base):
    __tablename__ = 'books'
    id = Column(Integer, primary_key=True)
    title = Column(String)
    author_id = Column(Integer, ForeignKey('authors.id'))
    author = relationship("Author", back_populates="books")

Author.books = relationship("Book", order_by=Book.id, back_populates="author")


Пример создания отношения Many-to-Many:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from sqlalchemy import (
    Column,
    Integer,
    String,
    Table,
    ForeignKey
)
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

association_table = Table('association', Base.metadata,
    Column('left_id', Integer, ForeignKey('left.id')),
    Column('right_id', Integer, ForeignKey('right.id'))
)

class Left(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    rights = relationship('Right', secondary=association_table, back_populates='lefts')

class Right(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    lefts = relationship('Left', secondary=association_table, back_populates='rights')


Пользователь

от stephon , 7 месяцев назад

@nikko 

Приведенные выше примеры демонстрируют создание связи между моделями в SQLAlchemy с использованием различных типов отношений. Важно понимать, что для создания связей между моделями в SQLAlchemy используются соответствующие атрибуты и методы, такие как relationship, ForeignKey и другие.


В каждом примере приведены две модели, которые имеют отношение между собой, и использованы различные типы отношений, такие как One-to-One, One-to-Many и Many-to-Many. Каждая модель определяется с помощью объявления класса и его атрибутов, их отношения определяются с использованием метода relationship.


Для создания связей между моделями в SQLAlchemy также используются атрибуты ForeignKey для указания внешнего ключа и back_populates для указания обратного отношения модели.


Надеюсь, это поможет вам понять, как создать связи между моделями в SQLAlchemy. Если у вас есть дополнительные вопросы, не стесняйтесь задавать.