Lavorare con oggetti correlati

In questo capitolo, ci concentreremo sugli oggetti correlati in SQLAlchemy ORM.

Ora, quando creiamo un oggetto Cliente, sarà presente una raccolta di fatture vuota sotto forma di Python List.

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

L'attributo fatture di c1.invoices sarà un elenco vuoto. Possiamo assegnare elementi nell'elenco come:

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

Eseguiamo il commit di questo oggetto nel database utilizzando l'oggetto Session come segue:

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

Questo genererà automaticamente query INSERT per clienti e tabelle fatture -

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)

Esaminiamo ora il contenuto della tabella dei clienti e della tabella delle fatture nella visualizzazione tabella di SQLiteStudio -

È possibile costruire l'oggetto Cliente fornendo l'attributo mappato delle fatture nel costruttore stesso utilizzando il comando seguente:

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

Oppure un elenco di oggetti da aggiungere utilizzando la funzione add_all () dell'oggetto sessione come mostrato di seguito -

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()