ฉันลองทำสิ่งต่อไปนี้แล้ว แต่ดูเหมือนว่าจะได้ผล:
class BaseModel(db.Model):
__abstract__ = True
row_ver = db.Column(db.Integer, nullable=False)
@declared_attr
def __mapper_args__(cls):
return {'version_id_col': cls.row_ver}
def to_dict(self):
res = dict()
for c in self.__table__.columns:
value = getattr(self, c.name)
if isinstance(value, date):
res[c.name] = value.isoformat()
elif isinstance(value, uuid.UUID):
res[c.name] = str(value)
else:
res[c.name] = value
return res
class Account(BaseModel):
__tablename__ = 'account'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
ฉันไม่แน่ใจว่ามันเป็นวิธีที่เหมาะสมในการเพิ่มคลาสฐานที่ประกาศหรือไม่นั่นคือคลาส db.Model มีอะไรผิดปกติกับโค้ดข้างต้นหรือไม่?
ที่เกี่ยวข้องด้วย: เป็นไปได้ไหมที่จะสร้างฐานการประกาศแบบกำหนดเองโดยสืบทอดจาก db.Model (ซึ่งตัวมันเองเป็นฐานประกาศ) บางอย่างดังนี้:
class Base(db.Model):
#some code here
from sqlalchemy.ext.declarative import declarative_base
BaseModel = declarative_base(cls=Base)
class Account(BaseModel)
#...