子类化SqlAlchemy DeclarativeMeta以向声明性ORM类添加类属性?

子类化SqlAlchemy DeclarativeMeta以向声明性ORM类添加类属性?,sqlalchemy,metaclass,declarative,Sqlalchemy,Metaclass,Declarative,这似乎是一个咒语,通过对declarative_base()使用的DeclarativeMeta元类进行子类化,并将子类作为参数传递以创建一个声明性基变量,从而向ORM类添加一个类属性 关于这样做的含义,有什么微妙或棘手的地方需要理解吗?这需要多次调用MyDeclarativeBase.create_all()和MyFnordDeclarativeBase.create_all()来初始化数据库,还是只需要前者?(ETA:似乎需要多个调用。)还有其他对天真的程序员来说不明显的问题吗 ETA:在“

这似乎是一个咒语,通过对
declarative_base()
使用的
DeclarativeMeta
元类进行子类化,并将子类作为参数传递以创建一个声明性基变量,从而向ORM类添加一个类属性

关于这样做的含义,有什么微妙或棘手的地方需要理解吗?这需要多次调用MyDeclarativeBase.create_all()和MyFnordDeclarativeBase.create_all()来初始化数据库,还是只需要前者?(ETA:似乎需要多个调用。)还有其他对天真的程序员来说不明显的问题吗

ETA:在“real”设置中对此进行实验表明,至少在关系定义和创建顺序依赖项方面增加了复杂性,当所有ORM类派生自同一声明性基类时,这些依赖项不会生效

谢谢

from sqlalchemy.ext.declarative import (
    declarative_base,
    DeclarativeMeta,
    )


class MyMeta(DeclarativeMeta):
    @property
    def my_class_property(self):
        return 'fnord'


MyDeclarativeBase = declarative_base()


MyFnordDeclarativeBase = declarative_base(metaclass=MyMeta)