python – sqlalchemy将mixin列移动到最后

python – sqlalchemy将mixin列移动到最后,第1张

概述我有一个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更好的解决方案…

总结

以上是内存溢出为你收集整理的python – sqlalchemy将mixin列移动到最后全部内容,希望文章能够帮你解决python – sqlalchemy将mixin列移动到最后所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1207639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存