Travailler avec des objets associés

Dans ce chapitre, nous nous concentrerons sur les objets associés dans SQLAlchemy ORM.

Désormais, lorsque nous créons un objet Client, une collection de factures vierge sera présente sous la forme de Liste Python.

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

L'attribut factures de c1.invoices sera une liste vide. Nous pouvons attribuer des éléments de la liste comme -

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

Commençons cet objet dans la base de données en utilisant l'objet Session comme suit -

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

Cela générera automatiquement des requêtes INSERT pour les clients et les tables de factures -

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)

Examinons maintenant le contenu de la table des clients et de la table des factures dans la vue table de SQLiteStudio -

Vous pouvez créer un objet Client en fournissant un attribut mappé de factures dans le constructeur lui-même en utilisant la commande ci-dessous -

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

Ou une liste d'objets à ajouter en utilisant la fonction add_all () de l'objet session comme indiqué ci-dessous -

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