Могу ли я читать из вычисляемого (представления) столбца в базовой модели SqlAlchemy? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть модель 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?

...