问题:因为是项目从mysql更换到达梦dm8数据库,同时数据库字段也需要更换为国标要求,使用column_property会有警告,改用synonym,但在Mixin类中会报错:sqlalchemy.exc.InvalidRequestError: Mapper properties (i.e. deferred,column_property(), relationship(), etc.) must be declared as @declared_attr callables on declarative mixin classes. For dataclass field() objects, use a lambda
解决:根据提示使用@declared_attr进行装饰
方法:
from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy.orm import synonym
from db.session import engine
from sqlalchemy import (
Column, Integer, String, DateTime)
Base = declarative_base()
Base.metadata.create_all(bind=engine)
class BaseMixin(object):
BH = Column(Integer, primary_key=True, autoincrement=True)
SFSC = Column(Integer, server_default='0')
CJZ = Column(Integer)
CJSJ = Column(DateTime)
GXZ = Column(Integer)
GXSJ = Column(DateTime)
SCZ = Column(Integer)
SCSJ = Column(DateTime)
QTXX = Column(String(1024))
@declared_attr
def id(self):
return synonym('BH')
@declared_attr
def is_delete(self):
return synonym('SFSC')
@declared_attr
def create_id(self):
return synonym('CJZ')
@declared_attr
def create_time(self):
return synonym('CJSJ')
@declared_attr
def update_id(self):
return synonym('GXZ')
@declared_attr
def update_time(self):
return synonym('GXSJ')
@declared_attr
def delete_id(self):
return synonym('SCZ')
@declared_attr
def delete_time(self):
return synonym('SCSJ')
@declared_attr
def info(self):
return synonym('QTXX')
参考:
https://www.coder.work/article/366125