เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การเลือกข้อมูลจากตารางด้วย SQLAlchemy

ทำได้ดีมากจนถึงตรงนี้! ถึงเวลาสร้าง select statement แรกด้วย SQLAlchemy แล้ว SQLAlchemy มอบวิธีการโต้ตอบกับฐานข้อมูลในแบบ "Pythonic" ที่สะดวกและเป็นระบบ ในแบบฝึกหัดที่แล้วที่ใช้ SQL ตรง ๆ คุณส่งคิวรีไปยังฐานข้อมูลโดยตรง แต่เมื่อใช้ SQLAlchemy จะทำงานผ่านออบเจ็กต์ Table แทน และ SQLAlchemy จะแปลงคิวรีของคุณให้เป็น SQL statement ที่เหมาะสมให้อัตโนมัติ ด้วยเหตุนี้ จึงไม่ต้องกังวลเรื่องความแตกต่างระหว่าง SQL dialect ต่าง ๆ เช่น MySQL หรือ PostgreSQL แต่สามารถใช้ประโยชน์จากเฟรมเวิร์กแบบ Pythonic ของ SQLAlchemy เพื่อทำให้ workflow คล่องตัวขึ้นและดึงข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น ด้วยเหตุนี้ SQLAlchemy จึงคุ้มค่าแก่การเรียนรู้ แม้ว่าคุณจะคุ้นเคยกับ SQL แบบดั้งเดิมอยู่แล้วก็ตาม

ในแบบฝึกหัดนี้ จะสร้าง statement เพื่อดึงข้อมูลทุกรายการจากตาราง census อีกครั้ง แต่คราวนี้จะใช้ฟังก์ชัน select() จากโมดูล sqlalchemy ฟังก์ชันนี้ต้องการ list ของตารางหรือคอลัมน์เป็นอาร์กิวเมนต์ที่จำเป็น เช่น select([my_table])

นอกจากนี้ยังจะดึงข้อมูลเพียงบางส่วนจาก ResultProxy โดยใช้ .fetchmany() พร้อมอาร์กิวเมนต์ size เพื่อระบุจำนวนรายการที่ต้องการ

Table และ MetaData ถูก import ไว้แล้ว โดย metadata พร้อมใช้งานในชื่อ metadata และการเชื่อมต่อฐานข้อมูลในชื่อ connection

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Python เบื้องต้นสำหรับฐานข้อมูล

ดูคอร์ส

คำแนะนำการฝึกหัด

  • Import select จากโมดูล sqlalchemy
  • Reflect ตาราง census โดยโค้ดส่วนนี้เขียนไว้ให้แล้ว
  • สร้างคิวรีโดยใช้ฟังก์ชัน select() เพื่อดึงข้อมูลทุกรายการในตาราง census โดยส่ง list ที่มีสมาชิกเพียงหนึ่งตัวคือ census เข้าไปใน select()
  • พิมพ์ stmt เพื่อดู SQL query ที่ถูกสร้างขึ้น โค้ดส่วนนี้เขียนไว้ให้แล้ว
  • ดึงข้อมูล 10 รายการจากตาราง census และเก็บไว้ในตัวแปร results โดยทำดังนี้:
    • ใช้เมธอด .execute() บน connection โดยส่ง stmt เป็นอาร์กิวเมนต์ เพื่อรับ ResultProxy
    • ใช้ .fetchmany() พร้อมอาร์กิวเมนต์ size ที่เหมาะสมบน connection.execute(stmt) เพื่อดึง ResultSet

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# Import select
from ____ import ____

# Reflect census table via engine: census
census = Table('census', metadata, autoload=True, autoload_with=engine)

# Build select statement for census table: stmt
stmt = ____

# Print the emitted statement to see the SQL string
print(stmt)

# Execute the statement on connection and fetch 10 records: result
results = ____.____(____).____(size=___)

# Execute the statement and print the results
print(results)
แก้ไขและรันโค้ด