Membina model berskala dan boleh diselenggara selalunya memerlukan pendekatan modular, terutamanya apabila mengendalikan gelagat dikongsi atau jenis lajur biasa merentas berbilang model. Dalam blog ini, kami akan membincangkan cara kami boleh memodulasi model menggunakan campuran dan anotasi SQLAlchemy.
Apabila mengerjakan projek, kami sering menghadapi tugasan yang berulang seperti menambah cap masa create_at dan updated_at pada model atau menentukan jenis lajur biasa seperti kunci utama UUID. Memodulasi kebimbangan ini kepada komponen yang berasingan mempunyai beberapa faedah:
1. Kebolehgunaan semula: Gelagat dikongsi dan takrifan lajur boleh digunakan merentas berbilang model.
2. Kebolehselenggaraan: Perubahan di satu tempat disebarkan kepada semua model bergantung.
3. Kebolehbacaan: Pemisahan kebimbangan yang jelas menjadikan kod lebih mudah difahami.
Mixin menyediakan logik atau medan boleh guna semula untuk model. Mari kita tentukan TimestampMixin yang secara automatik menambah medan create_at dan updated_at pada mana-mana model yang mewarisi daripadanya.
Fail: timestamp_mixin.py
from datetime import datetime from sqlalchemy import Column, DateTime from sqlalchemy.ext.declarative import declared_attr class TimestampMixin: @declared_attr def created_at(cls): return Column(DateTime, default=datetime.utcnow, nullable=False) @declared_attr def updated_at(cls): return Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
Jenis Beranotasi SQLchemy, tersedia melalui penaipan Python. Beranotasi, membolehkan anda menentukan sifat lajur boleh guna semula. Sebagai contoh, anda boleh menentukan kunci utama UUID atau lajur String dengan kekangan tertentu.
Fail: common_annotations.py
from typing import Annotated from uuid import uuid4 from sqlalchemy import String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import mapped_column uuid4pk = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid4, nullable=False) ] name = Annotated[ str, mapped_column(String(30), nullable=False) ]
Menggunakan campuran dan anotasi, kita boleh menentukan model yang mewarisi gelagat dan sifat dikongsi sambil memastikan pelaksanaan ringkas dan boleh dibaca.
Fail: user.py
from datetime import datetime from sqlalchemy import Column, DateTime from sqlalchemy.ext.declarative import declared_attr class TimestampMixin: @declared_attr def created_at(cls): return Column(DateTime, default=datetime.utcnow, nullable=False) @declared_attr def updated_at(cls): return Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
1. Perpisahan Jelas Kebimbangan
2. Kemudahan Penyelenggaraan
3. Skalabiliti
Memodulasi model dengan campuran dan anotasi SQLAlchemy ialah strategi yang baik untuk mengendalikan fungsi dan sifat dikongsi. Pendekatan ini bukan sahaja mengurangkan pertindihan tetapi juga selaras dengan amalan terbaik untuk kod yang bersih dan boleh diselenggara.
Atas ialah kandungan terperinci Memodulasi Model SQLAlchemy dengan Campuran dan Anotasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!