Gemeinsame Beziehungsoperatoren
In diesem Kapitel werden wir die Operatoren diskutieren, die auf Beziehungen aufbauen.
__eq __ ()
Der obige Operator ist ein Vergleich von vielen zu eins "gleich". Die Codezeile für diesen Operator lautet wie folgt:
s = session.query(Customer).filter(Invoice.invno.__eq__(12))
Die entsprechende SQL-Abfrage für die obige Codezeile lautet -
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 __ ()
Dieser Operator ist ein Eins-zu-Eins-Vergleich, der nicht gleich ist. Die Codezeile für diesen Operator lautet wie folgt:
s = session.query(Customer).filter(Invoice.custid.__ne__(2))
Die entsprechende SQL-Abfrage für die obige Codezeile ist unten angegeben.
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 != ?
enthält ()
Dieser Operator wird für Eins-zu-Viele-Sammlungen verwendet. Im Folgenden wird der Code für enthält () - angegeben.
s = session.query(Invoice).filter(Invoice.invno.contains([3,4,5]))
Die entsprechende SQL-Abfrage für die obige Codezeile lautet -
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 '%' + ? || '%')
irgendein()
Ein beliebiger () Operator wird für Sammlungen verwendet, wie unten gezeigt -
s = session.query(Customer).filter(Customer.invoices.any(Invoice.invno==11))
Die entsprechende SQL-Abfrage für die obige Codezeile wird unten angezeigt -
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 = ?)
hat()
Dieser Operator wird für skalare Referenzen wie folgt verwendet:
s = session.query(Invoice).filter(Invoice.customer.has(name = 'Arjun Pandit'))
Die entsprechende SQL-Abfrage für die obige Codezeile lautet -
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 = ?)