May 28, 2016

SQLAlchemy - Phần 2 - Truy vấn

Sau phần 1 - Xây dựng kiến trúc dựa vào SQLALchemy thì giờ phải có phần 2 - truy vấn cơ sở dữ liệu dựa. Rào trước cản sau, bài viết này mình chỉ mong chia sẻ 1 phần của vấn đề, không tham vọng làm hết tất tần tật cách truy vấn với SQLAlchemy. Bạn nào muốn tìm hiểu sâu thì nên vào trang chủ để biết thêm thông tin chi tiết, những hàm hay những truy vấn phức tạp. Không lăn tăn nữa, vào vấn đề thôi.

1 - Tạo đối tượng session

Với SQLAlchemy, để có thể thực hiện truy vấn cơ sở dữ liệu, chúng ta sẽ dùng 1 đối tượng session. Đối tượng này sẽ được đính kèm (bind) với engine tương tác cơ sở dữ liệu (xem lại phần 1).
from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

2 - Truy vấn đơn giản

Bây giờ, chúng ta sẽ dùng đối tượng session  tạo bên trên, kết hợp với những class schema để thực thi truy vấn. Ví dụ, chúng ta muốn lấy tất cả sản phẩm (Product)
products = session.query(Product).all()

Với phương thức all() sẽ trả về một danh sách những products có trong cơ sở dữ liệu. Tại đây, nếu chúng ta muốn xem câu SQL hiển thị thế nào thì chúng ta không cần phương thức all(), và có thể gọi print() để xem câu SQL như sau
sql = session.query(Product)
print(sql)

3 - Truy vấn filter

Chắc chắn là cần phải filter theo một điều kiện nào đó. Với SQLAlchemy điều này khá đơn giản với phương thức filter()
products = session.query(Product).filter(Product.id == 1).all()
products = session.query(Product).filter(Product.base_url.like('%abc%')).all()

4 - Truy vấn join

session.query(GroupProduct).join(Product).all()
session.query(GroupProduct).join(Product).filter(Product.id == 1).all()

5 - Truy vấn với function

Những function như count(), sum()
from sqlalchemy import func
total = session.query(func.count(GroupProduct.id)).\
            join(Product).\
            filter(Product.base_url.like('%abc%')).\
            scalar()
print(total)

No comments:

Post a Comment