2012-02-05 10 views
9

en caso de que tenga un usuario Modelo y artículo El modelo, el usuario y el artículo son de relación uno a muchos. para que pueda acceder artículo como estecómo limitar/compensar el resultado de la relación de sqlalchemy orm?

user = session.query(User).filter(id=1).one() 
print user.articles 

pero esto a enumerar los usuarios de todos los artículos, lo que si quiero limitar a los artículos 10? en los rieles hay un método all() que puede tener límite/desplazamiento en él. en sqlalchemy también hay un método all(), pero no tome params, ¿cómo lograr esto?

Editar:

parece user.articles[10:20] es válida, pero el sql no utilizó 10/20 en las consultas. entonces, de hecho, ¿cargará todos los datos coincidentes y filtrará en python?

Respuesta

11

La solución es utilizar una relación dynamic como se describe en la sección collection configuration techniques de la documentación de SQLAlchemy.

Al especificar la relación como

class User(...): 
    # ... 
    articles = relationship('Articles', order_by='desc(Articles.date)', lazy='dynamic') 

a continuación, puede escribir user.articles.limit(10) que generará y ejecutar una consulta en busca de los últimos diez artículos por parte del usuario. O puede usar la sintaxis [x:y] si lo prefiere, que generará automáticamente una cláusula LIMIT.

El rendimiento debe ser razonable, a menos que desee consultar los últimos diez artículos para aproximadamente 100 usuarios (en cuyo caso, al menos 101 consultas se enviarán al servidor).

Cuestiones relacionadas