Làm việc với các đối tượng liên quan

Trong chương này, chúng ta sẽ tập trung vào các đối tượng liên quan trong SQLAlchemy ORM.

Bây giờ khi chúng ta tạo một đối tượng Khách hàng, một tập hợp hóa đơn trống sẽ hiện diện ở dạng Danh sách Python.

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

Thuộc tính hóa đơn của c1.invoices sẽ là một danh sách trống. Chúng ta có thể gán các mục trong danh sách dưới dạng:

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

Hãy để chúng tôi cam kết đối tượng này với cơ sở dữ liệu bằng cách sử dụng đối tượng Session như sau:

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

Điều này sẽ tự động tạo các truy vấn CHÈN cho khách hàng và bảng hóa đơn -

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)

Bây giờ chúng ta hãy xem nội dung của bảng khách hàng và bảng hóa đơn trong chế độ xem bảng của SQLiteStudio -

Bạn có thể tạo đối tượng Khách hàng bằng cách cung cấp thuộc tính được ánh xạ của hóa đơn trong chính hàm tạo bằng cách sử dụng lệnh dưới đây:

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

Hoặc danh sách các đối tượng được thêm vào bằng cách sử dụng hàm add_all () của đối tượng phiên như hình bên dưới:

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