我正在尝试创建一个过滤器管理器来包装SQLAlchemy应用程序中的过滤器调用。但是,过滤器管理器未返回任何值。而且,它甚至似乎都没有运行SQL语句。我的会话的声明方式是否存在问题?
class FilterManager():
def __init__(self):
self.page = 1
self.pageLength = 5
Logger.info('Filter: Filter Manager Created')
def SimpleFilter(self):
limit = self.pageLength
offset = ((self.page - 1) * self.pageLength) + 1
session = Session()
return session.query(KeyAction).order_by(KeyAction.id)[limit:offset]
session.close()
然后,我添加了一个关键操作,该操作成功完成:
session = Session()
ka = KeyAction(name='Key Action 1', description = 'Test', custom = False)
session.add(ka)
session.commit()
session.close()
我的单元测试都在同一个断言上失败:
results = filter.SimpleFilter()
self.assertEquals(len(results), 1)
说结果的长度是0,而不是1。
我也尝试过在全局范围内声明一个会话,但这存在相同的问题。任何帮助将非常感激!
亚历克斯
- - - - - - - - - 编辑 - - - - - - - - -
基于下面的第一个答案,我进行了以下更新:
def SimpleFilter(self):
limit = ((self.page - 1) * self.pageLength)
offset = self.pageLength + ((self.page - 1) * self.pageLength)
session = Session()
results = session.query(KeyAction).order_by(KeyAction.id)[limit:offset]
session.close()
return results
现在,它根据脚本上一次运行时提交的结果返回结果(第一次返回0个结果,第二次返回3个,此后每次返回5个)
快速说明,按照此处的示例,我确实将会话声明移到了会话工厂声明之后。
为什么在此会话中不能读取写入数据库的数据?
这可能是由您的LIMIT / OFFSET引起的。切片符号带[]
不允许您这样定义LIMIT和OFFSET值。相反,您必须提供一个以Python样式开头和结尾的范围,例如:
[10:20]
这将返回10个项目(10到19,从零开始)。
另外,a之后的语句return
将永远不会执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句