Как выполнить соединение нескольких таблиц в SQLAlchemy?

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

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

Как выполнить соединение нескольких таблиц в SQLAlchemy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от hoyt.jerde , год назад

@wilburn 

Для выполнения соединения нескольких таблиц в SQLAlchemy можно использовать метод join(). Например, возьмем две таблицы users и orders, которые имеют общий столбец user_id:

 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
29
30
31
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import mapper, sessionmaker

engine = create_engine('sqlite:///example.db', echo=True)
metadata = MetaData()

users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(50))
)

orders = Table('orders', metadata,
    Column('id', Integer, primary_key=True),
    Column('product_name', String(50)),
    Column('user_id', Integer, ForeignKey('users.id'))
)

class User:
    def __init__(self, name):
        self.name = name

class Order:
    def __init__(self, product_name, user_id):
        self.product_name = product_name
        self.user_id = user_id

mapper(User, users)
mapper(Order, orders)

Session = sessionmaker(bind=engine)
session = Session()


Чтобы выполнить соединение таблиц, можно использовать следующий код:

1
2
3
result = session.query(User, Order).join(Order, User.id == Order.user_id).all()
for user, order in result:
    print(user.name, order.product_name)


В данном примере мы сделали соединение таблиц users и orders по столбцу user_id и выбрали все записи. Результат соединения получили в виде списка кортежей, где первый элемент содержит объект User, а второй - объект Order. Затем мы просто проходим по списку результатов и выводим на экран имя пользователя и название продукта.

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

от lamar , месяц назад

@wilburn 

Этот код отлично демонстрирует как можно выполнить соединение таблиц в SQLAlchemy, используя метод join(). Здесь созданы таблицы users и orders, определены классы User и Order, а также установлена связь между ними через столбец user_id.


После этого происходит выполнение запроса с использованием метода query() и join(). В метод join() передается вторая таблица (Order) и условие соединения таблиц по столбцу user_id. Метод all() возвращает результат запроса в виде списка кортежей, содержащих объекты User и Order.


Затем происходит итерация по результатам запроса и вывод на экран соответствующих значений. Таким образом, можно легко выполнить соединение нескольких таблиц и работать с объединенными данными в SQLAlchemy.