SQLAlchemy — запрос содержит только объекты на основе выраженийPython

Программы на Python
Ответить
Anonymous
 SQLAlchemy — запрос содержит только объекты на основе выражений

Сообщение Anonymous »

Я получаю эту ошибку SQLAlchemy при попытке выбрать определенные столбцы из таблицы и одновременно получить связи. Я также использую асинхронный сеанс.

Код: Выделить всё

sqlalchemy.exc.ArgumentError: Query has only expression-based entities; attribute loader options for Mapper[ModelA(modela)] can't be applied here.
Вот запрос:

Код: Выделить всё

async def get(self, fields):
# parse_fields gets the column and relationship of a SQLAlchemy table model, i.e ModelA.id or ModelA.my_relationship
columns, relationships = self.parse_fields(fields, ModelA)
stmnt = select(*columns)
if len(relationships):
stmnt = stmnt.options(selectinload(*relationships))
result = await self.session.execute(stmnt)
return result.all()
Обсуждаемые модели

Код: Выделить всё

class ModelA(Base):
__tablename__ = "modela"
name = Column(Text, nullable=True)
bs = relationship("ModelB", back_populates="a", lazy="joined")

class ModelB(Base):
__tablename__ = "modelb"
name = Column(Text, nullable=False)
a_id = Column(BigInteger, ForeignKey("a.id"), nullable=False)
a = relationship("ModelA", back_populates="bs", lazy="joined")
Я пытаюсь получить столбцы и связи из таблицы, одновременно контролируя, какие столбцы или связи извлекаются. Проблема в том, что когда я выбираю определенные столбцы и одновременно выбираю определенные отношения в таблице, возникают упомянутые ошибки. Но когда я выполняю что-то вроде запроса, например select(ModelA).options(selectinload(ModelA.my_relationship), он работает, но дает мне все столбцы и связи. Когда я запускаю что-то вроде select(*columns) где столбцы являются столбцами модели таблицы SQLAlchemy, я получаю столбцы, но не нужные мне связи. Как мне сделать запрос таким, чтобы я мог динамически выбирать как столбцы, так и отношения?

Подробнее здесь: https://stackoverflow.com/questions/782 ... d-entities
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»