ตัวดำเนินการความสัมพันธ์ทั่วไป
ในบทนี้เราจะพูดถึงตัวดำเนินการที่สร้างความสัมพันธ์
__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 != ?
ประกอบด้วย ()
ตัวดำเนินการนี้ใช้สำหรับคอลเลกชันแบบหนึ่งต่อหลายและระบุไว้ด้านล่างคือรหัสสำหรับมี ()
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 '%' + ? || '%')
ใด ๆ ()
ตัวดำเนินการใด ๆ () ใช้สำหรับคอลเลกชันดังที่แสดงด้านล่าง -
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 ที่เทียบเท่าสำหรับบรรทัดด้านบนของโค้ดคือ -
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 = ?)