Используйте сеанс SQLAlchemy в пользовательском методе запроса Flask-SQLAlchemy - PullRequest
0 голосов
/ 31 мая 2018

Я хотел бы создать собственный метод, чтобы сообщить мне, существует ли строка в моей базе данных.Метод SQLAlchemy exists возвращает подзапрос, но ничего не выполняет, поэтому я хотел создать метод does_exist, который будет просто возвращать True или False.Вот мой код:

from flask_sqlalchemy import SQLAlchemy, BaseQuery, Model

class CustomBaseQuery(BaseQuery):
    def does_exist(self):
        return db.session.query(self.exists()).scalar()

db = SQLAlchemy(app, query_class=CustomBaseQuery)

Это действительно работает, но кажется неправильным ссылаться на db.session в теле метода, что, таким образом, зависит от последующего присвоения имени экземпляру SQLAlchemy db.Я хотел бы найти способ ссылаться на возможный объект db.session в более общем виде.

Полный рабочий пример здесь: https://gist.github.com/wbruntra/3db7b630e6ffb86fe792e4ed5a7a9578

1 Ответ

0 голосов
/ 31 мая 2018

Хотя недокументированный, сеанс, используемый объектом Query, доступен как

self.session

, так что ваш более общий CustomBaseQuery может выглядеть как

class CustomBaseQuery(BaseQuery):
    def does_exist(self):
        return self.session.query(self.exists()).scalar()
...