Arbeiten mit verwandten Objekten

In diesem Kapitel konzentrieren wir uns auf die verwandten Objekte in SQLAlchemy ORM.

Wenn wir nun ein Kundenobjekt erstellen, wird eine leere Rechnungssammlung in Form einer Python-Liste angezeigt.

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

Das Rechnungsattribut von c1.invoices ist eine leere Liste. Wir können Elemente in der Liste als - zuweisen

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

Lassen Sie uns dieses Objekt mit dem Sitzungsobjekt wie folgt in die Datenbank übertragen:

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

Dadurch werden automatisch INSERT-Abfragen für Kunden und Rechnungstabellen generiert.

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)

Betrachten wir nun den Inhalt der Kundentabelle und der Rechnungstabelle in der Tabellenansicht von SQLiteStudio -

Sie können das Kundenobjekt erstellen, indem Sie das zugeordnete Attribut von Rechnungen im Konstruktor selbst mithilfe des folgenden Befehls angeben.

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

Oder eine Liste der Objekte, die mit der Funktion add_all () des Sitzungsobjekts hinzugefügt werden sollen (siehe unten).

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