Operadores de relaciones comunes
En este capítulo, discutiremos sobre los operadores que se basan en relaciones.
__eq __ ()
El operador anterior es una comparación "igual" de varios a uno. La línea de código para este operador es la que se muestra a continuación:
s = session.query(Customer).filter(Invoice.invno.__eq__(12))
La consulta SQL equivalente para la línea de código anterior es:
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 = ?
__nordeste__()
Este operador es una comparación de "no es igual" de varios a uno. La línea de código para este operador es la que se muestra a continuación:
s = session.query(Customer).filter(Invoice.custid.__ne__(2))
La consulta SQL equivalente para la línea de código anterior se proporciona a continuación:
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 != ?
contiene ()
Este operador se usa para colecciones de uno a muchos y a continuación se muestra el código para contains () -
s = session.query(Invoice).filter(Invoice.invno.contains([3,4,5]))
La consulta SQL equivalente para la línea de código anterior es:
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 '%' + ? || '%')
ninguna()
El operador any () se utiliza para colecciones como se muestra a continuación:
s = session.query(Customer).filter(Customer.invoices.any(Invoice.invno==11))
La consulta SQL equivalente para la línea de código anterior se muestra a continuación:
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 = ?)
tiene()
Este operador se utiliza para referencias escalares de la siguiente manera:
s = session.query(Invoice).filter(Invoice.customer.has(name = 'Arjun Pandit'))
La consulta SQL equivalente para la línea de código anterior es:
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 = ?)