Ich verwende das ORM von SQL Alchemy und finde, wenn ich eine einzelne Spalte zurückgebe, erhalte ich die folgenden Ergebnisse:
[(result,), (result_2,)] # etc...
Bei einem Set wie diesem muss ich das oft machen:
results = [r[0] for r in results] # So that I just have a list of result values
Das ist nicht so "schlecht", weil meine Ergebnismengen normalerweise klein sind, aber wenn dies nicht der Fall wäre, könnte dies einen erheblichen Overhead verursachen. Das Größte ist, dass ich das Gefühl habe, dass es die Quelle überfüllt, und das Fehlen dieses Schritts ist ein ziemlich häufiger Fehler, auf den ich stoße.
Gibt es eine Möglichkeit, diesen zusätzlichen Schritt zu vermeiden?
Nebenbei bemerkt: Dieses Verhalten des Orms scheint in diesem Fall unpraktisch zu sein, aber in einem anderen Fall, in dem meine Ergebnismenge [(id, value)] lautete, endet es folgendermaßen:
[(result_1_id, result_1_val), (result_2_id, result_2_val)]
Ich kann dann einfach machen:
results = dict(results) # so I have a map of id to value
Dieser hat den Vorteil, dass er als nützlicher Schritt nach der Rückgabe der Ergebnisse sinnvoll ist.
Ist das wirklich ein Problem oder bin ich nur ein Trottel und die Nachbearbeitung nach Erhalt der Ergebnismenge ist in beiden Fällen sinnvoll? Ich bin sicher, wir können uns einige andere gängige Nachbearbeitungsvorgänge vorstellen, um die Ergebnismenge im Anwendungscode benutzerfreundlicher zu machen. Gibt es allgemein leistungsstarke und bequeme Lösungen oder ist eine Nachbearbeitung unvermeidbar und lediglich für unterschiedliche Anwendungsnutzungen erforderlich?
Wenn meine Anwendung tatsächlich die Objekte nutzen kann, die von ORM von SQL Alchemy zurückgegeben werden, scheint dies äußerst hilfreich zu sein, aber in Fällen, in denen ich nicht kann oder nicht, nicht so sehr. Ist dies nur ein häufiges Problem von ORMs im Allgemeinen? Bin ich in solchen Fällen besser dran, die ORM-Schicht nicht zu verwenden?
Ich nehme an, ich sollte ein Beispiel für die tatsächlichen Orm-Abfragen zeigen, über die ich spreche:
session.query(OrmObj.column_name).all()
oder
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Natürlich gibt es in einer echten Abfrage normalerweise einige Filter usw.