У меня есть модель SqlAlchemy:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Pizza(Base):
__tablename__ = 'pizza'
id = Column(Integer, primary_key=True)
name = Column(String(50))
@property
def deliciousness() → int:
return lengthy_calculation()
Допустим, lengthy_calculation
интенсивно использует базу данных, и я хочу преобразовать sh его в (возможно, материализованное) представление, а не делать это в Python. Есть ли способ по существу сообщить SqlAlchemy, что я хочу писать в таблицу pizza
, но читать из view vw_pizza
(который имеет расширенный набор pizza
столбцов таблицы) , при сопоставлении с тем же классом модели Pizza
? Другими словами, я бы хотел иметь возможность сделать что-то вроде этого:
>>> session.query(Pizza).filter_by(name='chicago').filter(Pizza.deliciousness > 42)
Очевидно, я могу просто создать вторую модель ORM, соответствующую представлению:
>>> session.query(PizzaView).filter_by(...)
Но конечно, я хочу, чтобы возвращаемые значения были Pizza
объектами, а не PizzaView
объектами.
Есть ли способ достичь того, что я вижу здесь, с помощью SqlAlchemy?