2015-10-06 33 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

我的不好,我瘋了一個錯字。 ','→':' –