การกำหนดโมเดล
แมปคลาสกับตาราง
การกำหนดโมเดล เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ