Итак, я новичок в этом python и sqlalchemy. Мне нужна помощь с наследованием или, может быть, mixin (но скорее наследование).Наследование python в sqlalchemy
У меня есть psudo код, но я на самом деле не добились никакого прогресса, чтобы получить в любом месте:
Base = declarative_base()
class ModelBase(Base):
"""Base model that only defines last_updated"""
__tablename__ = 'doesnotexistandtheclassshouldnotbeinstantiated'
#all tables inheriting from ModelBase will have this column
last_updated = Column(DateTime)
def __init__(self, last_updated):
self.last_updated = last_updated
class User(ModelBase):
"""Defines the user but should also have the last_updated inherited from ModelBase"""
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
def __init__(self, ....):
ModelBase.__init__(last_updated)
Я хочу, чтобы все таблицы, унаследовавшие от ModelBase также имеют last_updated. Как мне это сделать?
ОБНОВЛЕНО КОД:
class BaseUserMixin(object):
"""Base mixin for models using stamped data"""
@declared_attr
def last_updated(cls):
return Column(DateTime)
@declared_attr
def last_updated_by(cls):
return Column(String)
def __init__(self, last_updated, last_updated_by):
self.last_updated = last_updated
self.last_updated_by = last_updated_by
Base = declarative_base(cls=BaseUserMixin)
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
fullname = Column(String)
password = Column(String)
enabled = Column(Boolean)
def __init__(self, name, fullname, password, email, last_updated, last_updated_by):
self.name = name
self.fullname = fullname
self.password = password
self.email = email
# goes wrong here
super(User, self).__init__(last_updated, last_updated_by)
def __repr__(self):
return "<User('%', '%', '%', '%', '%', '%')>"\
% (self.name,
self.fullname,
self.password,
self.email,
self.last_updated,
self.last_updated_by
)
Ошибка:
_declarative_constructor() takes exactly 1 argument (3 given)
Что может быть проблема? Я думал, что это работает, но при повторном запуске отладчика это не удалось.
Вы видите этот вопрос? http://stackoverflow.com/questions/1337095/sqlalchemy-inheritance Это, кажется, достаточно хороший ответ. – Magsol
есть. дело в том, что они не связаны, и это не «polymorphic_on» ничего ... – Asken