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.

  • SQLAlchemy erzeugt dynamische Tabellen und Spalten
  • Wie man sqlalchemy Rückkehr Schwimmer statt Dezimal bei der Reflektierung von Tabellen?
  • Sqlalchemy - elegante Art, mit mehreren optionalen Filtern umzugehen?
  • SQLAlchemy Beziehungsfehler: Objekt hat kein Attribut 'c'
  • Sqlalchemy.exc.ArgumentError: Plugin kann nicht geladen werden: sqlalchemy.dialects: driver
  • Flasche - Blaupause - sqlalchemy - kann den Namen 'db' nicht in moles Datei importieren
  • SqlAlchemy und Flasche, wie man viele-zu-viele-Beziehung abfragen kann
  • Konvertieren von SQL-Befehlen in Pythons ORM
  • Wie fügt man eine Zeile mit autoincrement id in eine Multi-Primärschlüssel-Tabelle ein?
  • SqlAlchemy: Exporttabelle in neue Datenbank
  • Möglich, ein Objekt zur SQLAlchemy-Sitzung ohne explizite Session.add () hinzuzufügen?
  • Python ist die beste Programmiersprache der Welt.