0Pricing
Python Academy · บทเรียน

การกำหนดโมเดล

แมปคลาสกับตาราง

การกำหนดโมเดล เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

โมเดลจับคู่กับตาราง

ใน ORM ของ SQLAlchemy โมเดล คือคลาส Python ที่จับคู่กับตารางในฐานข้อมูล แต่ละอินสแตนซ์จะกลายเป็นแถวข้อมูลหนึ่งแถว

โมเดลสืบทอดมาจากคลาส Base ที่ใช้ร่วมกัน

from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
    pass
print('Base class ready')

__tablename__

โมเดลทุกตัวกำหนด __tablename__ เพื่อระบุชื่อตาราง SQLAlchemy ใช้ค่านี้เมื่อสร้าง SQL

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)
print(User.__tablename__)

คอลัมน์ด้วย Mapped

SQLAlchemy รุ่นใหม่ประกาศคอลัมน์ด้วยคำใบ้ชนิดข้อมูล เช่น Mapped[int] และ mapped_column() คำใบ้ชนิดข้อมูลจะกำหนดชนิดข้อมูลของ 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]
    age: Mapped[int]
print('User has id, name, age')

คีย์หลัก

กำหนดคอลัมน์ให้เป็นคีย์หลักด้วย primary_key=True คีย์หลักชนิดจำนวนเต็มจะเพิ่มค่าโดยอัตโนมัติตามค่าเริ่มต้น

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class Product(Base):
    __tablename__ = 'products'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
print('id is the primary key')

คอลัมน์ที่ไม่บังคับ

ใช้ Mapped[str | None] หรือ Optional[str] เพื่ออนุญาตค่า NULL ส่วน Mapped[str] แบบทั่วไปจะเป็น NOT NULL

from typing import Optional
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)
    nickname: Mapped[Optional[str]]
print('nickname can be NULL')

ค่าเริ่มต้นและความไม่ซ้ำกัน

mapped_column() รับตัวเลือก เช่น unique=True และ default= เพื่อเพิ่มข้อจำกัดและค่าเริ่มต้นสำรอง

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)
    email: Mapped[str] = mapped_column(unique=True)
    active: Mapped[bool] = mapped_column(default=True)
print('email is unique, active defaults to True')

ความยาวสตริง

สำหรับฐานข้อมูลที่ต้องระบุความยาว ให้กำหนดความยาวของสตริงด้วย mapped_column(String(50))

from sqlalchemy import String
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] = mapped_column(String(50))
print('name limited to 50 chars')

การสร้างโครงสร้างฐานข้อมูล

Base.metadata.create_all(engine) สร้างตารางสำหรับทุกโมเดลที่สืบทอดมาจาก Base

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)
    name: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Schema created')

การสร้างอินสแตนซ์

สร้างแถวข้อมูลด้วยการสร้างอินสแตนซ์ของโมเดลเหมือนอ็อบเจ็กต์ 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]
u = User(name='Alice')
print(u.name)

การเพิ่ม __repr__

__repr__ ที่กำหนดเองช่วยให้การแก้จุดบกพร่องทำได้ง่ายขึ้น โดยแสดงข้อมูลของอ็อบเจ็กต์อย่างชัดเจน

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]
    def __repr__(self):
        return 'User(name=' + self.name + ')'
print(repr(User(name='Bob')))

โมเดลยังคงเป็น 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]
    def greet(self):
        return 'Hi, ' + self.name
print(User(name='Carol').greet())

ตรวจสอบความเข้าใจ

ทดสอบทักษะการกำหนดโมเดลของคุณ

สรุปทบทวน

คุณได้เรียนรู้การกำหนดโมเดล ORM

  • โมเดลสืบทอดมาจาก DeclarativeBase และกำหนด __tablename__
  • คอลัมน์ใช้ Mapped[type] และ mapped_column()
  • primary_key, unique และ default ใช้เพิ่มข้อจำกัด
  • create_all() ใช้สร้างตาราง

คำถามที่พบบ่อย

บทเรียน “การกำหนดโมเดล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดโมเดล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดโมเดล”

แมปคลาสกับตาราง คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดโมเดล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. SQLAlchemy Core เทียบกับ ORM
  2. การกำหนดโมเดล
  3. การสอบถามด้วยเซสชัน
  4. ความสัมพันธ์และการเชื่อมตาราง
← กลับไปที่ Python Academy