SQLAlchemy Core - Sử dụng các hàm liên kết
Các hàm là các hàm trong mô-đun SQLAlchemy triển khai các toán tử quan hệ được sử dụng trong mệnh đề WHERE của biểu thức SQL. Các toán tử AND, OR, NOT, v.v., được sử dụng để tạo thành một biểu thức ghép kết hợp hai biểu thức logic riêng lẻ. Một ví dụ đơn giản về việc sử dụng AND trong câu lệnh SELECT như sau:
SELECT * from EMPLOYEE WHERE salary>10000 AND age>30
Các hàm SQLAlchemy và_ (), or_ () và not_ () tương ứng triển khai các toán tử AND, OR và NOT.
hàm and_ ()
Nó tạo ra một tổ hợp các biểu thức được nối bởi AND. Dưới đây là một ví dụ để hiểu rõ hơn -
from sqlalchemy import and_
print(
and_(
students.c.name == 'Ravi',
students.c.id <3
)
)
Điều này dịch thành -
students.name = :name_1 AND students.id < :id_1
Để sử dụng và_ () trong một cấu trúc select () trên bảng sinh viên, hãy sử dụng dòng mã sau:
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
Câu lệnh SELECT có tính chất sau sẽ được xây dựng:
SELECT students.id,
students.name,
students.lastname
FROM students
WHERE students.name = :name_1 AND students.id < :id_1
Mã hoàn chỉnh hiển thị đầu ra của truy vấn SELECT ở trên như sau:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()
students = Table(
'students', meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
from sqlalchemy import and_, or_
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
result = conn.execute(stmt)
print (result.fetchall())
Hàng sau sẽ được chọn giả sử rằng bảng sinh viên được điền bằng dữ liệu được sử dụng trong ví dụ trước -
[(1, 'Ravi', 'Kapoor')]
hàm or_ ()
Nó tạo ra kết hợp các biểu thức được nối bởi OR. Chúng ta sẽ thay thế đối tượng stmt trong ví dụ trên bằng đối tượng sau bằng cách sử dụng or_ ()
stmt = select([students]).where(or_(students.c.name == 'Ravi', students.c.id <3))
Điều này sẽ tương đương với truy vấn SELECT sau:
SELECT students.id,
students.name,
students.lastname
FROM students
WHERE students.name = :name_1
OR students.id < :id_1
Khi bạn thực hiện thay thế và chạy đoạn mã trên, kết quả sẽ là hai hàng rơi vào điều kiện HOẶC -
[(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Khanna')]
hàm asc ()
Nó tạo ra một mệnh đề ORDER BY tăng dần. Hàm lấy cột để áp dụng hàm làm tham số.
from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))
Câu lệnh triển khai biểu thức SQL sau:
SELECT students.id,
students.name,
students.lastname
FROM students
ORDER BY students.name ASC
Đoạn mã sau liệt kê tất cả các bản ghi trong bảng sinh viên theo thứ tự tăng dần của cột tên -
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()
students = Table(
'students', meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))
result = conn.execute(stmt)
for row in result:
print (row)
Đoạn mã trên tạo ra kết quả sau:
(4, 'Abdul', 'Sattar')
(3, 'Komal', 'Bhandari')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')
hàm desc ()
Tương tự, hàm desc () tạo ra mệnh đề ORDER BY giảm dần như sau:
from sqlalchemy import desc
stmt = select([students]).order_by(desc(students.c.lastname))
Biểu thức SQL tương đương là:
SELECT students.id,
students.name,
students.lastname
FROM students
ORDER BY students.lastname DESC
Và đầu ra cho các dòng mã trên là -
(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')
(3, 'Komal', 'Bhandari')
hàm between ()
Nó tạo ra một mệnh đề vị ngữ GIỮA. Điều này thường được sử dụng để xác thực nếu giá trị của một cột nhất định nằm giữa một phạm vi. Ví dụ: mã sau chọn các hàng có cột id nằm trong khoảng từ 2 đến 4 -
from sqlalchemy import between
stmt = select([students]).where(between(students.c.id,2,4))
print (stmt)
Biểu thức SQL kết quả giống như sau:
SELECT students.id,
students.name,
students.lastname
FROM students
WHERE students.id
BETWEEN :id_1 AND :id_2
và kết quả như sau:
(2, 'Rajiv', 'Khanna')
(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')