2012-10-11 11 views
6

質問:クエリオブジェクトに既に適用されている.limit()を削除するにはどうすればよいですか。クエリオブジェクトに既に適用されている.limit()を削除するには

私はすでに.limit(N)が適用されているクエリを持っています。次に、.order_byを適用するために、クエリから制限を削除したいと思います。リミットまたはオフセットの前に注文を適用する必要があります。失敗

例:

query = session.query(Object).limit(10) 
query = query.order_by(Object.field) 

私がやってみました:

query = session.query(Object).limit(10) 
query = query.limit(None) # or False 
query = query.order_by(Object.field) 

しかし、それは動作しません。

私がこれを望んでいるのは、実際に限度が実用的なデフォルト制限として別の場所で実際に起こるからです。

おかげ

+0

あなたは受け入れ答えは素晴らしいですが、あなたはアウト考慮することをお勧めしますそのロジックを何らかの「クエリ設定」クラスに分類します。あなたの特定の状況が何であるか分かりません。 – Milimetric

答えて

10

limit(None)は、制限を解除します。それが働いていない場合、あなたは私が0.6.8までずっと戻ってそれをテストし、おそらくSQLAlchemyのの超古いバージョンであるかもしれない:

from sqlalchemy import Column, Integer 
from sqlalchemy.orm import Session 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class A(Base): 
    __tablename__ = "a" 

    id = Column(Integer, primary_key=True) 

s = Session() 

q = s.query(A).limit(5) 

q = q.limit(None).order_by(A.id) 

print q 
関連する問題