Praca z obiektami pokrewnymi

W tym rozdziale skupimy się na powiązanych obiektach w SQLAlchemy ORM.

Teraz, gdy utworzymy obiekt Customer, pusty zestaw faktur będzie obecny w postaci listy Pythona.

c1 = Customer(name = "Gopal Krishna", address = "Bank Street Hydarebad", email = "[email protected]")

Atrybut faktury faktur c1 będzie pustą listą. Możemy przypisać pozycje na liście jako -

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

Zatwierdźmy ten obiekt w bazie danych za pomocą obiektu Session w następujący sposób -

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

Spowoduje to automatyczne wygenerowanie zapytań INSERT dla klientów i tabel faktur -

INSERT INTO customers (name, address, email) VALUES (?, ?, ?) 
('Gopal Krishna', 'Bank Street Hydarebad', '[email protected]')
INSERT INTO invoices (custid, invno, amount) VALUES (?, ?, ?)
(2, 10, 15000)
INSERT INTO invoices (custid, invno, amount) VALUES (?, ?, ?)
(2, 14, 3850)

Przyjrzyjmy się teraz zawartości tabeli klientów i tabeli faktur w widoku tabeli SQLiteStudio -

Możesz skonstruować obiekt Customer, dostarczając mapowany atrybut faktur w samym konstruktorze za pomocą poniższego polecenia -

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

Lub lista obiektów do dodania za pomocą funkcji add_all () obiektu sesji, jak pokazano poniżej -

rows = [
   Customer(
      name = "Govind Kala", 
      address = "Gulmandi Aurangabad", 
      email = "[email protected]", 
      invoices = [Invoice(invno = 7, amount = 12000), Invoice(invno = 8, amount = 18500)]),

   Customer(
      name = "Abdul Rahman", 
      address = "Rohtak", 
      email = "[email protected]",
      invoices = [Invoice(invno = 9, amount = 15000), 
      Invoice(invno = 11, amount = 6000)
   ])
]

session.add_all(rows)
session.commit()