Ich versuche, einige Python-Code zu optimieren. Der Profiler sagt mir, dass SQLAlchemy's _get_col() ist, was die Leistung killt. Der Code sieht etwa so aus:Kann ich Zeilen von SQLAlchemy erhalten, die einfache Arrays statt Wörterbücher sind?
lots_of_rows = get_lots_of_rows()
for row in lots_of_rows:
if row.x == row.y:
print row.z
ich war durch den Code gehen und es so mehr machen ...
lots_of_rows = get_lots_of_rows()
for row in lots_of_rows:
if row[0] == row[1]:
print row[2]
... aber ich habe einige Unterlagen gefunden, scheint um anzuzeigen, dass Sie beim Zugriff auf Zeilenobjekte wie Arrays immer noch Wörterbuchschlüssel ziehen. Mit anderen Worten sieht die Zeile Objekt wie folgt:
'x': (x object)
'0': (x object)
'y': (y object)
'1': (y object)
'z': (z object)
'2': (z object)
Wenn das der Fall ist, bezweifle ich, dass ich von jeder Leistungssteigerung sehen werden Spalten von Nummer anstatt seinen Namen zugreift. Gibt es eine Möglichkeit, SA zu veranlassen, Ergebnisse als eine Liste von Tupeln oder eine Liste von Listen anstelle einer Liste von Wörterbüchern zurückzugeben? Kann jemand andere Optimierungen vorschlagen?
Ein Hauptziel für SQL Alchemy ist es, die Dinge hinzuzufügen, die Sie loswerden wollen. Vielleicht wäre es sinnvoll, für diese Abfrage auf den mysqldb/dbapi-Layer zuzugreifen? Selbst wenn nicht, würde ich empfehlen, eine ähnliche Abfrage mit nur dem mysqldb-Treiber zu rekodieren, um zu sehen, wie viel Leistung Sie wirklich erzielen könnten. –