Wie man Daten in sqlalchemy nach Liste sortiert

Ich habe eine Liste der ID aus der externen Postgresql-Datenbank.

A = [1,2,3,4,5,6,7,98,0] 

Ich würde die Abfrage der Datenbank mit SQLAlchemy machen, aber ich würde die Daten in postgresql nach einer Liste sortieren.

Ich habe eine Menge Dokumentation gelesen, kann aber keine Anregungen finden, wie man das macht.

Also, im Finale hätte ich:

 results = session.query(user).limit(20).offset(10).order_by(A) 

Prost

AKTUALISIEREN:

Ich habe eine Lösung gefunden, es ist nicht so gut, wie ich es erwartet habe, aber funktioniert gut. Jedenfalls, wenn Sie eine bessere Lösung kennen, lassen Sie mich einfach wissen!

 ids = ','.join([str(i) for i in A]) results = session.query(user).filter(user.id.in_(A)).\ limit(20).offset(10).\ order_by(" position(CONCAT(',',users.id::text,',') in ',{0},'.format(ids)") 

2 Solutions collect form web for “Wie man Daten in sqlalchemy nach Liste sortiert”

Wenn du das nicht unbedingt in SQL tun musst, könntest du einfach die zurückgegebene Liste der Objekte direkt in Python sortieren.

Beispiel (mit pythons sortierter Funktion)

 results = session.query(user).filter(user.id.in_(A)).all() results = sorted(results, key=lambda o: A.index(o.id)) 

Ein anderer Weg wäre, eine andere Helfer-Tabelle zu erstellen, die Auftragspositionen für jede user.id enthält, sich darauf anschließen und bestellen:

 A = [1,2,3,4,5,6,7,98,0] stmt = " UNION ALL ".join( 'SELECT {0} AS user_id, {1} AS order_id'.format(uid, row) for row, uid in enumerate(A)) ordq = text(stmt).columns(user_id=Integer, order_id=Integer).alias("t") results = session.query(user).join(ordq, user.id == ordq.c.user_id).order_by(ordq.c.order_id).all() 

Ich kann nicht beurteilen, ob dies besser im Vergleich zu Ihrer Version ist, aber es sollte zumindest nicht-RDBMS spezifisch sein.

  • Wie mache ich zusammengesetzte Spalten mit SQLAlchemy deklarativ?
  • Spalte Details in sqlite3
  • Wie elegant die Existenz eines Objekts / Instanz / Variable zu überprüfen und gleichzeitig zuzuordnen, um Variable, wenn es in Python existiert?
  • Wie man den ausgeführten SQL-Code von SQLAlchemy abruft
  • Isolierung von py.test DB-Sessions in Flask-SQLAlchemy
  • Wie kann man den Spaltentyp vom Zeichen ändern, der sich in der Ganzzahl mit sqlalchemy-migrate unterscheidet
  • SQLAlchemy und leere IN-Klausel
  • Schreiben von Dataframe in die Postgres-Datenbank
  • Sqlalchemy-Abfrage liefert falsche und veraltete Ergebnisse (für sqlite-Engine)
  • Gibt es irgendwelche Nebenwirkungen aus dem Aufruf von SQLAlchemy Flush () innerhalb des Codes?
  • Benannte Parameter in Datenbankfunktionen mit SQLAlchemy
  • Python ist die beste Programmiersprache der Welt.