python – sqlalchemy将mixin列移动到最后
发布时间:2020-09-06 05:56:10 所属栏目:Python 来源:互联网
导读:我有一个sqlalchemy模型,其中所有大多数表/对象都有一个注释字段.所以要尝试遵循DRY原则,我将该字段移到了一个mixin类. class NotesMixin(object): notes = sa.Column(sa.String(4000) , nullable=False, default=)class Service(Base, NotesMixin):
|
我有一个sqlalchemy模型,其中所有大多数表/对象都有一个注释字段.所以要尝试遵循DRY原则,我将该字段移到了一个mixin类. class NotesMixin(object):
notes = sa.Column(sa.String(4000),nullable=False,default='')
class Service(Base,NotesMixin):
__tablename__ = "service"
service_id = sa.Column(sa.Integer,primary_key=True)
name = sa.Column(sa.String(255),index=True,unique=True)
class Datacenter(Base,NotesMixin):
__tablename__ = "datacenter"
datacenter_id = sa.Column(sa.Integer,unique=True)
class Network(Base,NotesMixin,StatusMixin):
__tablename__ = "network"
network_id = sa.Column(sa.Integer,primary_key=True)
etc...
现在notes列是model / db中的第一列.我知道这并不影响我的应用程序的功能,但是在使用id之前,它会刺激我看到一些注释. 解决方法找到更清洁的解决方案使用sqlalchemy.ext.declarative.declared_attr装饰器在sqlalchemy 0.6.5(sqlalchemy.util.classproperty在sqlalchemy< = 0.6.4) class NotesMixin(object):
@declared_attr
def notes(cls):
return sa.Column(sa.String(4000),default='')
根据文档,这是“对于具有外键的列,以及需要目标显式上下文的各种映射程序级结构”.虽然这里严格来说不是这样,但是通过在构建子类时调用方法(和创建列),因此避免了复制的需要.这意味着mixin列将结束.可能比黑客_creation_order更好的解决方案… (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
