2012-10-11 14 views
6

pregunta: ¿Cómo elimino un .limit() que ya se ha aplicado a un objeto de consulta.Cómo elimino un .limit() que ya se aplicó a un objeto de consulta

Tengo una consulta que ya tiene .limit (N) aplicado. Entonces me gustaría eliminar el límite de la consulta, para tener un .order_by aplicado. El pedido debe aplicarse antes de cualquier límite o compensación.

ejemplo, que falla:

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

Intenté hacer:

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

Pero eso no funciona.

La razón por la que quiero esto, es que el límite en realidad sucede en otro lugar como un límite predeterminado razonable.

Gracias

+0

la respuesta que aceptó es grande, pero es posible que desee factorizar esa lógica en algún tipo de clase de "configuración de consulta". No estoy seguro de cuál es tu situación específica. – Milimetric

Respuesta

10

limit(None), se cancelará el límite. Si eso no funciona, es posible que en una versión súper antiguo de SQLAlchemy tal vez, he comprobado todo el camino de vuelta a 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 
Cuestiones relacionadas