sqlalchemy的Mixin类中字段重命名

本文共有1957个字,关键词:

问题:因为是项目从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
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论