1

オブジェクトをデータベースに格納できるように (可能であれば、オブジェクトを取得できるように)、非 ORM クラスの ORM バージョンを開発しようとしています。

from ruamel.yaml import YAMLObject

class User(YAMLObject):
    yaml_tag = u'user'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Other useful methods

私が今達成したいのUserは、Pythonの世界のように機能する同様のオブジェクトですが、ORMオブジェクトとしても使用できるため、データベースに保存できます。私が試したことは、巧妙に、次のとおりです。

Base = declarative_base()

class SQLUser(Base, User):

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

    def __init__(self, name, age):
        self.name = name
        self.age = age

このクラス階層で例を実行すると、Python 2 で次のエラーが発生します。

TypeError : メタクラス ベース メタクラスの競合を呼び出すときのエラー: 派生クラスのメタクラスは、そのすべてのベースのメタクラスの (厳密ではない) サブクラスでなければなりません

これはメタクラスに関連しているとYAMLObject思います...しかし、これらのオブジェクトをYAMLとして保存できるようにしたいので、必要です。このエラーについて私が読んだことについては、おそらく、YAMLObjectメタクラスとの両方を継承する 3 番目のメタクラスをBase使用し、それを使用して必要なクラスを作成する必要があります...

class MetaMixinUser(type(User), type(Base)):
    pass

class SQLUser(six.with_metaclass(MetaMixinUser)):
    #[...]

残念ながら、これにより別のエラーが発生します。

AttributeError : タイプ オブジェクト 'SQLUser' には属性 '_decl_class_registry' がありません

私の推論のどこに欠陥があるか教えていただけますか?

4

1 に答える 1