Sqlalchemy-orm-common-relationship-operators

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

一般的な関係演算子

この章では、関係を構築する演算子について説明します。

eq()

上記の演算子は、多対1の「等しい」比較です。 この演算子のコード行は次のとおりです-

s = session.query(Customer).filter(Invoice.invno.__eq__(12))

上記のコード行の同等のSQLクエリは-

SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers, invoices
WHERE invoices.invno = ?

ne()

この演算子は、多対1の「等しくない」比較です。 この演算子のコード行は次のとおりです-

s = session.query(Customer).filter(Invoice.custid.__ne__(2))

上記のコード行の同等のSQLクエリを以下に示します-

SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers, invoices
WHERE invoices.custid != ?

contains()

この演算子は1対多のコレクションに使用され、以下に示すのはcontains()のコードです-

s = session.query(Invoice).filter(Invoice.invno.contains([3,4,5]))

上記のコード行の同等のSQLクエリは-

SELECT invoices.id
AS invoices_id, invoices.custid
AS invoices_custid, invoices.invno
AS invoices_invno, invoices.amount
AS invoices_amount
FROM invoices
WHERE (invoices.invno LIKE '%' + ? || '%')

どれか()

any()演算子は、以下に示すようにコレクションに使用されます-

s = session.query(Customer).filter(Customer.invoices.any(Invoice.invno==11))

上記のコード行の同等のSQLクエリを以下に示します-

SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
WHERE EXISTS (
   SELECT 1
   FROM invoices
   WHERE customers.id = invoices.custid
   AND invoices.invno = ?)

has()

この演算子は、次のようにスカラー参照に使用されます-

s = session.query(Invoice).filter(Invoice.customer.has(name = 'Arjun Pandit'))

上記のコード行の同等のSQLクエリは-

SELECT invoices.id
AS invoices_id, invoices.custid
AS invoices_custid, invoices.invno
AS invoices_invno, invoices.amount
AS invoices_amount
FROM invoices
WHERE EXISTS (
   SELECT 1
   FROM customers
   WHERE customers.id = invoices.custid
   AND customers.name = ?)