我想创建一个自定义方法来告诉我数据库中是否存在行。 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
答案 0 :(得分:1)
虽然没有记录,但Query
对象使用的会话可以作为
self.session
所以你的通用CustomBaseQuery
可能看起来像
class CustomBaseQuery(BaseQuery):
def does_exist(self):
return self.session.query(self.exists()).scalar()