関連オブジェクトの操作
この章では、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()