Gibt es eine Möglichkeit, die vorherigen/nächsten Datensätze aus einer SqlAlchemy-Abfrage zu erhalten? Wie so:SqlAlchemy prev/next accessors?
record.id
record.next.id
record.prev.id
konnte ich die prev/next Methoden zu jedem Modell hinzufügen mich, aber ich frage mich, ob es bereits einige automagischen Weise, die ich übersehen. Die betreffende Webanwendung ist in Pylonen geschrieben.
Bearbeiten: Dies ist wahrscheinlich ein schmutziger Hack, aber es funktioniert. Ich importierte das sqlalchemy Session-Objekt in mein Modell und tat dies:
def next(self):
return Session.query(Blog).filter(Blog.id > self.id).order_by(Blog.id).first()
def prev(self):
return Session.query(Blog).filter(Blog.id < self.id).order_by(desc(Blog.id)).first()
Ohne das Modell zu ändern (indem Sie die Beziehung zu den Tabellen hinzufügen), ist Ihre Lösung ziemlich gut. Das einzige, was ich ändern würde, ist die 'Session.query (...' zu 'Session.object_session (self) .query (...' (siehe http://www.sqlalchemy.org/docs/orm/session). html # sqlalchemy.orm.session.Session.object_session) – van
Um dies klarzustellen, verwendet Session.query die globale Session-Klasse, die in Ihrem eigenen Projekt definiert ist, und Session.object_session verwendet die Session-Klasse, die mit sqlalchemy geliefert wird. –