2015-10-06 50 views
0

我试图创建一个过滤器管理器来结束过滤呼叫在SQLAlchemy的应用程序。但是,过滤管理器没有返回任何值。而且,它甚至不会运行SQL语句。我的会话如何声明有问题吗?SQLAlchemy的过滤管理器不返回任何值

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个)

快速提示,在会话工厂声明之后,我确实将会话声明移动到了正确的位置,如示例here所示。

为什么我不能看在这个环节中写入DB数据?

回答

1

这可能是由你的LIMIT/OFFSET是原因。带有[]的切片符号不允许您定义LIMIT和OFFSET值。相反,你必须提供一个Python风格的范围内开始和结束,例如:

[10:20] 

这将返回10个项目(10至19日,从零开始)。

此外,return后声明将不会被执行。

+0

我试过这样做,并得到了上述错误。另外,我在终端输出中看不到任何查询。我不认为它曾经查询过数据库。 –

+0

请始终添加完整的错误追溯! –

+0

我的不好,我疯了一个错字。 ','→':' –

相关问题