V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whoami9894
V2EX  ›  问与答

SQLAlchemy 有办法创建一个通用字段的父类吗

  •  
  •   whoami9894 · 2019-03-31 21:31:14 +08:00 · 723 次点击
    这是一个创建于 1847 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要创建几张表,每张表有大量通用字段,想通过继承来复用这些字段

    创建了一个 metaclass 来增加类属性,但是报 metaclass conflict 了

    TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

    按报错需要子类的元类继承自所有父类的元类,尝试去继承 db.Model 的元类好像有点问题

    代码如下

    class MetaRank(type):
        def __new__(cls, name, bases, attrs):
            attrs.update({
                'id': db.Column(db.Integer),
                'rank1': db.Column(db.Integer),
                'rank2': db.Column(db.Integer),
                'rank3': db.Column(db.Integer),
                'rank4': db.Column(db.Integer),
                'rank5': db.Column(db.Integer),
                'rank6': db.Column(db.Integer),
            })
            return type.__new__(cls, name, bases, attrs)
    
    
    class BaseRank(object, metaclass=MetaRank):
        pass
        
        
    class MovieRank(db.Model, BaseRank):
        work_id = db.ForeignKey('movie.id')
    
    
    class PhotoRank(db.Model, BaseRank):
        work_id = db.ForeignKey('photo.id')
    

    不知道我表述清楚了没,大概意思和这篇文章一样 https://www.dreamincode.net/forums/topic/324123-metaclass-for-a-class-extending-from-sqlalchemy-declarative-base/

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2926 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:40 · PVG 21:40 · LAX 06:40 · JFK 09:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.