Sqlalchemy-orm-working-with-related-objects

提供:Dev Guides
移動先:案内検索

関連オブジェクトの使用

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

これで、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のテーブルビューで顧客テーブルと請求書テーブルの内容を見てみましょう-

顧客テーブルビュー

請求書テーブル

あなたは、以下のコマンドを使用して、コンストラクタ自体に請求書のマッピングされた属性を提供することにより、顧客オブジェクトを構築することができます-

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