SQLAlchemy ORM - SQL văn bản
Trước đó, SQL dạng văn bản sử dụng hàm text () đã được giải thích từ quan điểm của ngôn ngữ biểu đạt cốt lõi của SQLAlchemy. Bây giờ chúng ta sẽ thảo luận về nó từ quan điểm ORM.
Các chuỗi văn bản có thể được sử dụng linh hoạt với đối tượng Truy vấn bằng cách chỉ định việc sử dụng chúng với cấu trúc text (). Hầu hết các phương pháp áp dụng đều chấp nhận nó. Ví dụ, filter () và order_by ().
Trong ví dụ đưa ra bên dưới, phương thức filter () dịch chuỗi “id <3” thành id WHERE <3
from sqlalchemy import text
for cust in session.query(Customers).filter(text("id<3")):
print(cust.name)
Biểu thức SQL thô được tạo cho thấy chuyển đổi bộ lọc sang mệnh đề WHERE với mã được minh họa bên dưới:
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
Từ dữ liệu mẫu của chúng tôi trong bảng Khách hàng, hai hàng sẽ được chọn và cột tên sẽ được in như sau:
Ravi Kumar
Komal Pande
Để chỉ định các tham số liên kết với SQL dựa trên chuỗi, hãy sử dụng dấu hai chấm và để chỉ định các giá trị, hãy sử dụng phương thức params ().
cust = session.query(Customers).filter(text("id = :value")).params(value = 1).one()
SQL hiệu quả được hiển thị trên bảng điều khiển Python sẽ như dưới đây:
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 = ?
Để sử dụng một câu lệnh hoàn toàn dựa trên chuỗi, một cấu trúc text () đại diện cho một câu lệnh hoàn chỉnh có thể được chuyển tới from_statement ().
session.query(Customers).from_statement(text("SELECT * FROM customers")).all()
Kết quả của đoạn mã trên sẽ là một câu lệnh SELECT cơ bản như dưới đây:
SELECT * FROM customers
Rõ ràng, tất cả các bản ghi trong bảng khách hàng sẽ được chọn.
Cấu trúc text () cho phép chúng ta liên kết SQL văn bản của nó với các biểu thức cột được ánh xạ theo vị trí Core hoặc ORM. Chúng ta có thể đạt được điều này bằng cách chuyển các biểu thức cột làm đối số vị trí cho phương thức 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()
Các cột id và tên của tất cả các hàng sẽ được chọn mặc dù công cụ SQLite thực thi biểu thức sau được tạo bởi mã trên hiển thị tất cả các cột trong phương thức text () -
SELECT name, id, name, address, email FROM customers