#python #orm #sqlalchemy #properties #hybrid
#python #orm #sqlalchemy #свойства #гибрид
Вопрос:
У меня есть следующий класс модели:
class ArticleOptionSetModel(db.Model):
__tablename__ = 'sdt_articles_options_sets'
id = db.Column(db.Integer, db.Sequence("sdq_articles_options_sets"), primary_key=True)
article_id = db.Column(db.Integer, db.ForeignKey('sdt_articles.id'), nullable=False)
option_set_id = db.Column(db.Integer, db.ForeignKey('sdt_options_sets.id'), nullable=False)
order_num = db.Column(db.Integer, nullable=False)
def have_options(self, article_id) -> int:
result = db.session.query(func.count(ArticleOptionSetModel.id))
.join(OptionSetModel, ArticleOptionSetModel.option_set_id == OptionSetModel.id)
.filter(ArticleOptionSetModel.article_id == self.article_id)
.filter(OptionSetModel.option_type == OT_OPTION).one()
if result[0] > 0:
return 1
else:
return 0
Если я попытаюсь использовать эту модель в соединении и извлечь поле:
result = db.session.query(ArticleModel.id,
ArticleOptionSetModel.have_options)
.join(ArticleOptionSetModel, ArticleModel.id == ArticleOptionSetModel.article_id)
return result.all()
Я получаю эту ошибку:
sqlalchemy.exc.InvalidRequestError: ожидаемое выражение SQL, столбец или отображенный объект — получено ‘1’
где 1 — это значение, возвращаемое моим методом.
0 или 1, возвращаемые методом, следует рассматривать как результат столбца в запросе вызывающего. Как это возможно сделать?
Ответ №1:
Вы должны вернуть
select([1])
or select([0])
для возврата как объект SQL.