Пример (взято из руководства SQLAlchemy):
Код: Выделить всё
Base = declarative_base()
class Interval(Base):
__tablename__ = 'interval'
id = Column(Integer, primary_key=True)
start = Column(Integer)
end = Column(Integer)
@hybrid_property
def length(self):
return self.end - self.start
Поэтому моим первым грубым тестом было просто добавить: length = Column(Float). Очевидно, это не работает (но я все равно решил попробовать :p), поскольку метод length перезаписывает столбец length.
Сейчас единственный способ, который я могу придумать, — это вычислить его в init и отложить вызов super(), вот так:
Код: Выделить всё
Base = declarative_base()
class Interval(Base):
__tablename__ = 'interval'
id = Column(Integer, primary_key=True)
start = Column(Integer)
end = Column(Integer)
length = Column(Integer)
def __init__(self, *args, **kwargs):
kwargs['length'] = kwargs['end'] - kwargs['start']
super().__init__(*args, **kwargs)
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/638 ... sqlalchemy
Мобильная версия