オブジェクトをデータベースに格納できるように (可能であれば、オブジェクトを取得できるように)、非 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' がありません
私の推論のどこに欠陥があるか教えていただけますか?