10

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

既に .limit(N) が適用されているクエリがあります。次に、クエリから制限を削除して、.order_by を適用したいと思います。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)

しかし、それはうまくいきません。

これが必要な理由は、制限が実際には別の場所で賢明なデフォルト制限として発生するためです。

ありがとう

4

1 に答える 1

16

limit(None)制限を解除します。それが機能しない場合は、SQLAlchemy の非常に古いバージョンを使用している可能性があります。私は 0.6.8 までさかのぼってテストしました。

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
于 2012-10-11T21:58:35.907 に答える