SQLAlchemy Core เทียบกับ ORM
ทำความเข้าใจสองชั้นการทำงาน
SQLAlchemy Core เทียบกับ ORM เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
SQLAlchemy คืออะไร
SQLAlchemy เป็นชุดเครื่องมือ Python ยอดนิยมสำหรับทำงานกับฐานข้อมูลเชิงสัมพันธ์ โดยมีสองชั้น ได้แก่ Core และ ORM
ติดตั้งได้ด้วย pip install sqlalchemy
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)เอนจิน
ทั้งสองชั้นเริ่มต้นด้วย Engine ซึ่งสร้างโดย create_engine() เอนจินจะจัดการกลุ่มการเชื่อมต่อ และรู้วิธีสื่อสารกับฐานข้อมูลเฉพาะของคุณผ่าน URL
from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)สองชั้นการทำงาน
Core เป็นชุดเครื่องมือสำหรับนิพจน์ SQL คุณสร้างคำสั่งสืบค้นที่ใกล้เคียงกับ SQL โดยตรง
ORM ทำงานอยู่เหนือ Core และจับคู่คลาส Python กับตาราง ทำให้คุณทำงานกับอ็อบเจ็กต์แทนแถวข้อมูล
# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')Core: การกำหนดตาราง
ใน Core คุณอธิบายตารางอย่างชัดเจนด้วยอ็อบเจ็กต์ Table และ MetaData
from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String))
print('Table defined:', users.name)Core: การสร้างคำสั่งสืบค้น
Core สร้างคำสั่งสืบค้นด้วยนิพจน์ Python เช่น select() ซึ่งแปลงเป็น SQL ได้โดยตรง
from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)ORM: คลาสที่จับคู่แล้ว
ใน ORM คลาส Python ใช้แทนตาราง แต่ละแอตทริบิวต์จะจับคู่กับคอลัมน์ คุณสืบค้นและบันทึกอ็อบเจ็กต์แทนการทำงานกับแถวข้อมูลดิบ
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
print('Mapped class:', User.__tablename__)ควรใช้ Core เมื่อใด
Core เหมาะเมื่อคุณต้องการควบคุม SQL ที่แน่นอนอย่างละเอียด ทำงานกับข้อมูลจำนวนมาก หรือเรียกใช้คำสั่งสืบค้นสำหรับรายงานที่ซับซ้อนซึ่งการใช้อ็อบเจ็กต์อาจเพิ่มภาระในการทำงาน
# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')ควรใช้ ORM เมื่อใด
ORM เหมาะกับโค้ดแอปพลิเคชันทั่วไป คุณสามารถจำลองเอนทิตีทางธุรกิจเป็นคลาส ติดตามการเปลี่ยนแปลง และเขียนโค้ดประกอบได้น้อยลง
# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')ทั้งสองใช้เอนจินร่วมกัน
เนื่องจาก ORM สร้างอยู่บน Core ทั้งสองจึงใช้ Engine และกลุ่มการเชื่อมต่อเดียวกัน คุณยังสามารถใช้ทั้งสองแบบผสมกันในแอปพลิเคชันเดียวได้
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')การสร้างตาราง
เมื่อใช้ ORM, Base.metadata.create_all(engine) จะออกคำสั่ง CREATE TABLE สำหรับคลาสที่จับคู่ไว้ทั้งหมด
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')การเลือกชั้นการทำงาน
แอปพลิเคชันส่วนใหญ่ใช้ ORM เป็นค่าเริ่มต้นสำหรับงานทั่วไป แล้วจึงใช้ Core สำหรับคำสั่งสืบค้นที่หนักหรือปรับแต่งมาอย่างละเอียดซึ่งพบไม่บ่อย การรู้จักทั้งสองแบบทำให้คุณมีความยืดหยุ่น
# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับสองชั้นการทำงานของคุณ
สรุปทบทวน
คุณได้รู้จักสถาปัตยกรรมของ SQLAlchemy
Engineเป็นกลไกหลักของทุกอย่างผ่านcreate_engine()- Core เป็นชุดเครื่องมือสำหรับนิพจน์ SQL เพื่อการควบคุมและประสิทธิภาพ
- ORM จับคู่คลาสกับตาราง เพื่อให้เขียนโค้ดแอปพลิเคชันได้สะดวกและมีประสิทธิผล
- ทั้งสองใช้เอนจินเดียวกันและสามารถใช้ร่วมกันได้
คำถามที่พบบ่อย
บทเรียน “SQLAlchemy Core เทียบกับ ORM” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “SQLAlchemy Core เทียบกับ ORM” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “SQLAlchemy Core เทียบกับ ORM”
ทำความเข้าใจสองชั้นการทำงาน คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “SQLAlchemy Core เทียบกับ ORM” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- SQLAlchemy Core เทียบกับ ORM
- การกำหนดโมเดล
- การสอบถามด้วยเซสชัน
- ความสัมพันธ์และการเชื่อมตาราง