関連オブジェクトの操作

この章では、SQLAlchemyORMの関連オブジェクトに焦点を当てます。

これで、Customerオブジェクトを作成すると、空白の請求書コレクションがPythonリストの形式で表示されます。

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

c1.invoicesのinvoices属性は空のリストになります。リスト内のアイテムを-として割り当てることができます

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

次のようにSessionオブジェクトを使用してこのオブジェクトをデータベースにコミットしましょう-

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

これにより、顧客と請求書テーブルのINSERTクエリが自動的に生成されます-

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)

SQLiteStudioのテーブルビューでcustomersテーブルとinvoicesテーブルの内容を見てみましょう-

以下のコマンドを使用して、コンストラクター自体に請求書のマップされた属性を提供することにより、Customerオブジェクトを構築できます。

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

または、以下に示すように、セッションオブジェクトのadd_all()関数を使用して追加するオブジェクトのリスト-

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