2012-10-11 15 views
6

pytanie: Jak usunąć .limit(), który jest już zastosowany do obiektu zapytania.Jak usunąć .limit(), który jest już zastosowany do obiektu zapytania

Mam kwerendę, która już ma .limit (N) stosowane. Następnie chciałbym usunąć limit z zapytania, aby zastosować .order_by. Zamówienie musi być zastosowane przed jakimkolwiek limitem lub offsetem.

przykład, który kończy się niepowodzeniem:

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

Próbowałem robić:

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

Ale to nie działa.

Powodem tego chcę, jest to, że limit faktycznie dzieje się w innym miejscu jako rozsądny domyślny limit.

Dzięki

+0

odpowiedź, akceptowane jest super, ale może chcesz się czynnika tę logikę do jakiejś klasy "ustawień zapytań". Nie jestem pewien, jaka jest twoja konkretna sytuacja. – Milimetric

Odpowiedz

10

limit(None) anuluje granicę. Jeśli to nie działa, może znajdować się na super-starej wersji SQLAlchemy może, ja testowałem to przez całą drogę z powrotem do 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 
Powiązane problemy