Ich versuche, basierend auf Informationen, die in einen RESTful-Webdienst übergeben werden, SQLalchemy zu verwenden, um eine Abfrage zu erstellen, die optional Filtern und Sortieren verwenden kann. Ich konnte dies iterativ in Java tun, indem ich mit einer einfachen Abfrage anfing und bei Bedarf Filter/Sortierung hinzufügte, aber ich kann es in Python nicht herausfinden. Gibt es eine Möglichkeit etwas ähnliches wie dies zu tun:Python & SqlAlchemy - Iterativer Aufbau einer Abfrage
q = BaseQuery([Image], session)
# Add pagination
q.paginate(page=page, per_page=per_page)
# If present, add filter
if filter is not None:
q.filter(or_(func.lower(Image.description).like('%' + filter + '%'), func.lower(Image.name).like('%' + filter + '%')))
# If present, add sorting
if sortField is not None and sortDir is not None:
if sortDir == 'asc':
q.sort_by(asc(Image.sortField))
elif sortDir == 'desc':
q.sort_by(desc(Image.sortField))
for item in q.items:
print(item)
diese Weise wird die Abfrage q
gebaut wird iterativ auf das, was die Benutzeroberfläche erfordert, statt mit einer Tonne zu tun, wenn Aussagen der Abfrage Fall ist es zu bestimmen, erfordert. Es scheint einfach nicht zu funktionieren.
Gibt es Gründe, die Sie nicht erneut die Zuordnung zu 'q' jedes Mal? 'q = q.paginate (...)', 'q = q.sorted_by (...)'? –
Ah, ist das wirklich so einfach? Sie müssen es einfach neu zuweisen, anstatt zu versuchen, ein bestehendes Objekt hinzuzufügen. – ev0lution37
Wo die Operationskette, dann ja: 'something.filter (...). Sort_by (...)' ist nicht anders als: 'q = etwas.filter (...)' dann 'q = q.sort_by (...) ' –