공통 관계 연산자

이 장에서는 관계를 기반으로하는 연산자에 대해 설명합니다.

__eq __ ()

위의 연산자는 다 대일 "같음"비교입니다. 이 연산자에 대한 코드 줄은 다음과 같습니다.

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

이 연산자는 다 대일 "같지 않음"비교입니다. 이 연산자에 대한 코드 줄은 다음과 같습니다.

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

이 연산자는 일대 다 컬렉션에 사용되며 다음은 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 = ?)