Trabalho com objetos relacionados

Neste capítulo, vamos nos concentrar nos objetos relacionados no SQLAlchemy ORM.

Agora, quando criamos um objeto Cliente, uma coleção de faturas em branco estará presente na forma de Lista Python.

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

O atributo de faturas de c1.invoices será uma lista vazia. Podemos atribuir itens na lista como -

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

Vamos enviar este objeto para o banco de dados usando o objeto Session da seguinte forma -

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

Isso irá gerar automaticamente consultas INSERT para clientes e tabelas de faturas -

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)

Vejamos agora o conteúdo da tabela de clientes e a tabela de faturas na visualização de tabela do SQLiteStudio -

Você pode construir o objeto Cliente, fornecendo o atributo mapeado de faturas no próprio construtor usando o comando abaixo -

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

Ou uma lista de objetos a serem adicionados usando a função add_all () do objeto de sessão como mostrado abaixo -

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