在自定义Flask-SQLAlchemy查询方法中使用SQLAlchemy会话

时间:2018-05-31 08:45:08

标签: python sqlalchemy flask-sqlalchemy

我想创建一个自定义方法来告诉我数据库中是否存在行。 SQLAlchemy exists方法返回子查询但不执行任何操作,因此我想创建方法does_exist,它只返回TrueFalse。这是我的代码:

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 :(得分:1)

虽然没有记录,但Query对象使用的会话可以作为

访问
self.session

所以你的通用CustomBaseQuery可能看起来像

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