Учебники

Общие операторы отношений

В этой главе мы обсудим операторы, основанные на отношениях.

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

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 = ?)

есть ()

Этот оператор используется для скалярных ссылок следующим образом:

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

Эквивалентный SQL-запрос для приведенной выше строки кода —