Учебники

Работа со связанными объектами

В этой главе мы сосредоточимся на связанных объектах в SQLAlchemy ORM.

Теперь, когда мы создаем объект Customer, будет представлена ​​пустая коллекция счетов в форме списка Python.

c1 = Customer(name = "Gopal Krishna", address = "Bank Street Hydarebad", email = "gk@gmail.com")

Атрибут invoices в c1.invoices будет пустым списком. Мы можем назначить элементы в списке как —

c1.invoices = [Invoice(invno = 10, amount = 15000), Invoice(invno = 14, amount = 3850)]

Давайте передадим этот объект в базу данных, используя объект Session следующим образом:

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
session.add(c1)
session.commit()

Это автоматически сгенерирует запросы INSERT для таблиц клиентов и счетов —

INSERT INTO customers (name, address, email) VALUES (?, ?, ?) 
('Gopal Krishna', 'Bank Street Hydarebad', 'gk@gmail.com')
INSERT INTO invoices (custid, invno, amount) VALUES (?, ?, ?)
(2, 10, 15000)
INSERT INTO invoices (custid, invno, amount) VALUES (?, ?, ?)
(2, 14, 3850)

Давайте теперь посмотрим на содержимое таблицы клиентов и таблицы счетов в табличном представлении SQLiteStudio —

Таблица клиентов

Таблица счетов

Вы можете создать объект Customer, предоставив сопоставленный атрибут счетов в самом конструкторе, используя команду ниже —

c2 = [
   Customer(
      name = "Govind Pant", 
      address = "Gulmandi Aurangabad",
      email = "gpant@gmail.com",
      invoices = [Invoice(invno = 3, amount = 10000), 
      Invoice(invno = 4, amount = 5000)]
   )
]

Или список объектов, которые будут добавлены с использованием функции add_all () объекта сеанса, как показано ниже —