SQLAlchemy ORM - การใช้แบบสอบถาม
คำสั่ง SELECT ทั้งหมดที่สร้างโดย SQLAlchemy ORM ถูกสร้างโดย Query object มันมีอินเทอร์เฟซแบบกำเนิดดังนั้นการเรียกที่ต่อเนื่องจะส่งคืนอ็อบเจ็กต์ Query ใหม่สำเนาของเดิมพร้อมเกณฑ์และตัวเลือกเพิ่มเติมที่เกี่ยวข้อง
เริ่มต้นวัตถุแบบสอบถามโดยใช้วิธีการสืบค้น () ของเซสชันดังนี้ -
q = session.query(mapped class)
คำสั่งต่อไปนี้เทียบเท่ากับข้อความข้างต้น -
q = Query(mappedClass, session)
ออบเจ็กต์คิวรีมีเมธอด all () ซึ่งส่งคืนชุดผลลัพธ์ในรูปแบบของรายการวัตถุ หากเราดำเนินการบนโต๊ะลูกค้าของเรา -
result = session.query(Customers).all()
คำสั่งนี้มีประสิทธิภาพเทียบเท่ากับนิพจน์ SQL ต่อไปนี้ -
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
อ็อบเจ็กต์ผลลัพธ์สามารถข้ามผ่านได้โดยใช้ For loop ด้านล่างเพื่อรับเร็กคอร์ดทั้งหมดในตารางลูกค้าอ้างอิง นี่คือรหัสที่สมบูรณ์เพื่อแสดงบันทึกทั้งหมดในตารางลูกค้า -
from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Customers(Base):
__tablename__ = 'customers'
id = Column(Integer, primary_key = True)
name = Column(String)
address = Column(String)
email = Column(String)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
result = session.query(Customers).all()
for row in result:
print ("Name: ",row.name, "Address:",row.address, "Email:",row.email)
Python console แสดงรายการบันทึกดังต่อไปนี้ -
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]
Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]
Name: Rajender Nath Address: Sector 40, Gurgaon Email: [email protected]
Name: S.M.Krishna Address: Budhwar Peth, Pune Email: [email protected]
วัตถุ Query ยังมีวิธีการที่มีประโยชน์ดังต่อไปนี้ -
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | add_columns() จะเพิ่มนิพจน์คอลัมน์อย่างน้อยหนึ่งรายการในรายการคอลัมน์ผลลัพธ์ที่จะส่งคืน |
2 | add_entity() เพิ่มเอนทิตีที่แมปลงในรายการคอลัมน์ผลลัพธ์ที่จะส่งคืน |
3 | count() ส่งคืนจำนวนแถวที่ Query นี้จะส่งคืน |
4 | delete() ดำเนินการค้นหาลบจำนวนมาก ลบแถวที่ตรงกับแบบสอบถามนี้จากฐานข้อมูล |
5 | distinct() ใช้ส่วนคำสั่ง DISTINCT กับแบบสอบถามและส่งคืนแบบสอบถามที่เป็นผลลัพธ์ใหม่ |
6 | filter() ใช้เกณฑ์การกรองที่กำหนดกับสำเนาของแบบสอบถามนี้โดยใช้นิพจน์ SQL |
7 | first() จะส่งคืนผลลัพธ์แรกของแบบสอบถามนี้หรือไม่มีหากผลลัพธ์ไม่มีแถวใด ๆ |
8 | get() ส่งคืนอินสแตนซ์ตามตัวระบุคีย์หลักที่กำหนดซึ่งให้การเข้าถึงโดยตรงไปยังแผนที่ข้อมูลประจำตัวของเซสชันที่เป็นเจ้าของ |
9 | group_by() ใช้เกณฑ์ GROUP BY อย่างน้อยหนึ่งรายการกับแบบสอบถามและส่งคืนแบบสอบถามที่เป็นผลลัพธ์ใหม่ |
10 | join() สร้างการเข้าร่วม SQL กับเกณฑ์ของวัตถุแบบสอบถามนี้และใช้โดยกำเนิดโดยส่งคืนแบบสอบถามที่เป็นผลลัพธ์ใหม่ |
11 | one() จะส่งกลับผลลัพธ์เดียวหรือเพิ่มข้อยกเว้น |
12 | order_by() ใช้เกณฑ์ ORDER BY อย่างน้อยหนึ่งรายการกับแบบสอบถามและส่งคืนแบบสอบถามที่เป็นผลลัพธ์ใหม่ |
13 | update() ดำเนินการแบบสอบถามการอัปเดตจำนวนมากและอัปเดตแถวที่ตรงกับแบบสอบถามนี้ในฐานข้อมูล |