SQLAlchemy ORM - Textual SQL
ก่อนหน้านี้ข้อความ SQL ที่ใช้ฟังก์ชัน text () ได้รับการอธิบายจากมุมมองของภาษานิพจน์หลักของ SQLAlchemy ตอนนี้เราจะพูดคุยจากมุมมองของ ORM
สามารถใช้สตริงตัวอักษรได้อย่างยืดหยุ่นกับวัตถุ Query โดยระบุการใช้งานด้วยโครงสร้าง text () วิธีการที่ใช้ได้ส่วนใหญ่ยอมรับ ตัวอย่างเช่น filter () และ order_by ()
ในตัวอย่างด้านล่างนี้วิธีการ filter () จะแปลสตริง“ id <3” เป็น WHERE id <3
from sqlalchemy import text
for cust in session.query(Customers).filter(text("id<3")):
print(cust.name)
นิพจน์ SQL ดิบที่สร้างขึ้นแสดงการแปลงตัวกรองเป็นส่วนคำสั่ง WHERE พร้อมรหัสที่แสดงด้านล่าง -
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
WHERE id<3
จากข้อมูลตัวอย่างของเราในตารางลูกค้าจะมีการเลือกสองแถวและคอลัมน์ชื่อจะถูกพิมพ์ดังนี้ -
Ravi Kumar
Komal Pande
ในการระบุพารามิเตอร์การผูกด้วย SQL แบบสตริงให้ใช้โคลอนและเพื่อระบุค่าให้ใช้เมธอด params ()
cust = session.query(Customers).filter(text("id = :value")).params(value = 1).one()
SQL ที่มีประสิทธิภาพที่แสดงบนคอนโซล Python จะเป็นดังที่ระบุด้านล่าง -
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
WHERE id = ?
ในการใช้คำสั่งแบบสตริงทั้งหมดข้อความ () สร้างแทนคำสั่งที่สมบูรณ์สามารถส่งผ่านไปยัง from_statement ()
session.query(Customers).from_statement(text("SELECT * FROM customers")).all()
ผลลัพธ์ของโค้ดด้านบนจะเป็นคำสั่ง SELECT พื้นฐานตามที่ระบุด้านล่าง -
SELECT * FROM customers
เห็นได้ชัดว่าระเบียนทั้งหมดในตารางลูกค้าจะถูกเลือก
โครงสร้าง text () ช่วยให้เราสามารถเชื่อมโยง SQL ที่เป็นข้อความกับนิพจน์คอลัมน์ Core หรือ ORM ที่แมปได้ในตำแหน่ง เราสามารถบรรลุสิ่งนี้ได้โดยส่งนิพจน์คอลัมน์เป็นอาร์กิวเมนต์ตำแหน่งไปยังเมธอด TextClause.columns ()
stmt = text("SELECT name, id, name, address, email FROM customers")
stmt = stmt.columns(Customers.id, Customers.name)
session.query(Customers.id, Customers.name).from_statement(stmt).all()
คอลัมน์ id และชื่อของแถวทั้งหมดจะถูกเลือกแม้ว่าเอ็นจิ้น SQLite จะเรียกใช้นิพจน์ต่อไปนี้ที่สร้างโดยโค้ดด้านบนจะแสดงคอลัมน์ทั้งหมดใน text () วิธีการ -
SELECT name, id, name, address, email FROM customers