Как использовать отношения в SQLAlchemy?

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

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

Как использовать отношения в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от adrien.waters , 9 месяцев назад

@brooklyn 

В SQLAlchemy для создания отношений между таблицами используются объекты типа ForeignKey и relationship.


Допустим, у нас есть две таблицы: пользователи и заказы. Один пользователь может сделать много заказов, но каждый заказ принадлежит только одному пользователю. Для создания связи между этими таблицами, в таблицу заказов добавим внешний ключ на таблицу пользователей:

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

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    orders = relationship("Order", back_populates="user")

class Order(Base):
    __tablename__ = 'orders'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship("User", back_populates="orders")


В данном примере мы добавили связь One-To-Many между таблицами. Здесь пользователи представлены классом User, а заказы - классом Order. В таблице заказов мы добавили внешний ключ user_id на таблицу пользователей через ForeignKey('users.id'). Также мы добавили свойство user в класс Order, которое связано с объектом User через отношение relationship.


Теперь мы можем получить всех пользователей и список их заказов:

1
2
3
4
5
users = session.query(User).all()
for user in users:
    print(user.name)
    for order in user.orders:
        print(order.id)


Также мы можем получить пользователя, который сделал конкретный заказ:

1
2
3
order = session.query(Order).first()
user = order.user
print(user.name)