#python #orm #sqlalchemy
#python #orm #sqlalchemy
Вопрос:
У меня есть класс, который содержит идентификатор автора и идентификатор статьи:
class SearchResults(Base):
__abstract__ = True
author_id = Column(String)
article_id = Column(String)
Я хотел бы вернуть только два столбца: author_id, article_id (фильтрация исключена из приведенных ниже примеров)
У этого класса не может быть соответствующей таблицы, пока она является результатом поискового запроса.
Я изо всех сил пытаюсь автоматически сопоставить его с классом с заклятым врагом SQL. Когда класс передается как аргумент запроса, подобный этому:
search_results = db.query(SearchResults).select_from(models.Article).join(models.Author).all()
Сбой ORM с ошибкой:
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '<class 'app.db.models.SearchResults'>'
Когда указаны столбцы, я получаю кортеж вместо класса:
search_results = db.query(models.Acticle.id, models.Author.author_id).select_from(models.Article).join(models.Author).all()
возможно ли сопоставить результаты, отличные от таблицы, с классом?
Ответ №1:
Пожалуйста, взгляните на сопоставление класса с произвольными выборками или сопоставление класса с несколькими таблицами разделов документации.
Для второго примера вы можете получить таблицы для Article
и Author
с помощью:
author_table = models.Author.__table__
article_table = modesl.Article.__table__