에서 확장 클래스의 메타 클래스를 정의하는 방법 :은 내가 사용 SQLAlchemy의 선언적 기본
from sqlalchemy.types import (
Integer,
String,
Boolean
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class SampleMeta(type):
def __new__(cls, name, bases, attrs):
attrs.update({ 'id': Column('Id', Integer, primary_key=True),
'name': Column('Name', String),
'description': Column('Description', String),
'is_active': Column('IsActive', Boolean)
})
return super(SampleMeta, cls).__new__(cls, name, bases, attrs)
class Sample(Base):
__tablename__ = 'Sample'
__table_args__ = {'useexisting': True}
__metaclass__ = SampleMeta
def __init__(self, id, name, description, is_active):
self.id = id
self.name = name
self.description = description
self.is_active = is_active
def __repr__(self):
return "<(%d, '%s', '%s', %r)>" % (self.id, self.name, self.description, self.isactive)
그리고 오류 I을 : 파이썬 2.6 SQLAlchemy의 0.6.1
이것은 내가 뭘하려고 오전입니다 나는 점점이 있습니다 : 지금
TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
을 나는
class Sample(object)
를 사용하여 위와 같은 일을 할 경우
대신
class Sample(Base)
의 그것은 절대적으로 잘 작동합니다.
동적으로 클래스의 속성을 업데이트해야합니다. 따라서 동적 속성 및 열 이름을 사용하게 될 것입니다. 그리고 거기에 도착하기 위해서는 위의 코드가 필요합니다.
다중 상속 .... 천재 .... SQLAlchemy의의 창조자에서 예상대로. – goFrendiAsgard