В этой главе мы обсудим операторы, основанные на отношениях.
__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-запрос для приведенной выше строки кода —