Tự động tải bảng từ cơ sở dữ liệu
SQLAlchemy có thể tự động tải các bảng từ cơ sở dữ liệu bằng kỹ thuật gọi là reflection. Reflection là quá trình đọc cơ sở dữ liệu và xây dựng metadata dựa trên thông tin đó. Đây là cách làm ngược lại với việc tự tạo một Table thủ công và rất hữu ích khi làm việc với các cơ sở dữ liệu hiện có.
Để thực hiện reflection, trước tiên bạn cần import và khởi tạo một đối tượng MetaData. Đối tượng MetaData chứa thông tin về các bảng được lưu trong cơ sở dữ liệu. Trong quá trình reflection, đối tượng MetaData sẽ tự động được điền thông tin về bảng được phản chiếu, vì vậy chúng ta chỉ cần khởi tạo nó trước bằng cách gọi MetaData().
Bạn cũng cần import đối tượng Table từ gói SQLAlchemy. Sau đó, bạn dùng đối tượng Table này để đọc bảng từ engine, tự động tải các cột, và điền metadata. Việc này có thể thực hiện bằng một lần gọi Table(): dùng Table theo cách này khá giống với việc truyền đối số cho một hàm. Ví dụ, để tự động tải các cột với engine, bạn phải truyền các đối số từ khóa autoload=True và autoload_with=engine cho Table().
Cuối cùng, để xem thông tin về đối tượng bạn vừa tạo, bạn sẽ dùng hàm repr(). Với bất kỳ đối tượng Python nào, repr() trả về biểu diễn dạng văn bản của đối tượng đó. Với các đối tượng Table của SQLAlchemy, nó sẽ trả về thông tin về bảng nằm trong metadata.
Trong bài tập này, nhiệm vụ của bạn là phản chiếu bảng "census" có sẵn trên engine vào một biến có tên census. Chúng tôi đã điền sẵn phần mã tạo engine mà bạn đã viết ở bài trước.
Bài tập này là một phần của khóa học
Nhập môn Cơ sở dữ liệu với Python
Hướng dẫn bài tập
- Import
TablevàMetaDatatừsqlalchemy. - Tạo một đối tượng
MetaData:metadata - Phản chiếu bảng
censusbằng cách dùng đối tượngTablevới các đối số:- Tên của bảng dưới dạng chuỗi (
'census'). - Đối tượng metadata bạn vừa khởi tạo.
autoload=True- Engine để tự động tải cùng — trong trường hợp này là
engine.
- Tên của bảng dưới dạng chuỗi (
- In chi tiết của
censusbằng hàmrepr().
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Import create_engine, MetaData, and Table
from sqlalchemy import create_engine, ___, ____
# Create engine: engine
engine = create_engine('sqlite:///census.sqlite')
# Create a metadata object: metadata
metadata = ___
# Reflect census table from the engine: census
census = Table(____, ____, autoload=____, autoload_with=____)
# Print census table metadata
print(____)