การโหลดตารางจากฐานข้อมูลอัตโนมัติ
SQLAlchemy รองรับการโหลดตารางจากฐานข้อมูลโดยอัตโนมัติผ่านกระบวนการที่เรียกว่า reflection ซึ่งเป็นการอ่านโครงสร้างฐานข้อมูลและสร้าง metadata จากข้อมูลนั้น กระบวนการนี้ตรงข้ามกับการสร้างตารางด้วยมือ และมีประโยชน์มากเมื่อต้องทำงานกับฐานข้อมูลที่มีอยู่แล้ว
ในการทำ reflection จะต้องนำเข้าและสร้างออบเจ็กต์ MetaData ก่อน ออบเจ็กต์ MetaData เก็บข้อมูลเกี่ยวกับตารางต่าง ๆ ในฐานข้อมูล เมื่อทำ reflection ระบบจะเติมข้อมูลของตารางลงใน MetaData โดยอัตโนมัติ จึงต้องเรียก MetaData() เพื่อสร้างออบเจ็กต์นี้ก่อนเท่านั้น
นอกจากนี้ ยังต้องนำเข้าออบเจ็กต์ Table จากแพ็กเกจ SQLAlchemy แล้วใช้ออบเจ็กต์ดังกล่าวเพื่ออ่านตารางจาก engine โหลดคอลัมน์โดยอัตโนมัติ และเติมข้อมูลลงใน metadata ทั้งหมดนี้ทำได้ด้วยการเรียก Table() เพียงครั้งเดียว ซึ่งคล้ายกับการส่งอาร์กิวเมนต์ให้ฟังก์ชัน ตัวอย่างเช่น หากต้องการโหลดคอลัมน์อัตโนมัติด้วย engine ต้องระบุ keyword arguments autoload=True และ autoload_with=engine ใน Table()
สุดท้าย หากต้องการดูข้อมูลของออบเจ็กต์ที่สร้างขึ้น ให้ใช้ฟังก์ชัน repr() ซึ่งจะคืนค่าเป็นข้อความแสดงรายละเอียดของออบเจ็กต์นั้น สำหรับออบเจ็กต์ Table ใน SQLAlchemy ฟังก์ชันนี้จะแสดงข้อมูลของตารางที่เก็บอยู่ใน metadata
ในแบบฝึกหัดนี้ ให้ reflection ตาราง "census" จาก engine แล้วเก็บผลลัพธ์ไว้ในตัวแปรชื่อ census โดยโค้ดสำหรับสร้าง engine จากแบบฝึกหัดก่อนหน้าได้เตรียมไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้นสำหรับฐานข้อมูล
คำแนะนำการฝึกหัด
- นำเข้า
TableและMetaDataจากsqlalchemy - สร้างออบเจ็กต์
MetaDataชื่อmetadata - ทำ reflection ตาราง
censusโดยใช้ออบเจ็กต์Tableพร้อมอาร์กิวเมนต์ดังนี้:- ชื่อตารางในรูปแบบ string (
'census') - ออบเจ็กต์ metadata ที่สร้างไว้
autoload=True- engine ที่ต้องการใช้โหลดอัตโนมัติ ในที่นี้คือ
engine
- ชื่อตารางในรูปแบบ string (
- พิมพ์รายละเอียดของ
censusโดยใช้ฟังก์ชันrepr()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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(____)