SQLAlchemy Filter Manager不返回任何值

时间:2015-10-06 03:46:06

标签: python orm filter sqlalchemy

我正在尝试创建一个过滤器管理器来包装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次)

快速注意,我确实在会话工厂声明之后将会话声明移动到示例here

为什么我不能读取此会话中写入数据库的数据?

1 个答案:

答案 0 :(得分:1)

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

[10:20]

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

此外,永远不会执行return之后的语句。