Ausgabe pyodbc Cursor Ergebnisse als Python-Wörterbuch
Wie kann ich serialisieren pyodbc cursor-Ausgabe (von .fetchone
.fetchmany
oder .fetchall
) als Python-dictionary?
Ich bin mit bottlepy und zurückgeben müssen, dict, so kann es zurückgeben, da JSON.
InformationsquelleAutor der Frage Foo Stack | 2013-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wissen, Spalten vor der Zeit, verwenden Sie cursor.Beschreibung zu bauen, eine Liste von Spaltennamen und zipwobei jede Zeile eine Liste von Wörterbüchern. Beispiel wird davon ausgegangen, Verbindungs-und Abfrage gebaut:
InformationsquelleAutor der Antwort Bryan
@Beargle Ergebnis mit bottlepy, ich war in der Lage, diese zu erstellen sehr präzise Abfrage auszusetzen Endpunkt:
InformationsquelleAutor der Antwort Foo Stack
Hier ist eine kurze form-version, die Sie vielleicht in der Lage sein zu verwenden
Wie Sie sich vielleicht bewusst sein, wenn Sie hinzufügen * um eine Liste, die Sie im Grunde entfernt die Liste verlassen werden die einzelnen Einträge als Parameter an die Funktion, die Sie anrufen. Durch die Verwendung von zip Holen wir die 1. bis n-Eintrag und zip Sie zusammen wie ein Reißverschluss in dir Hose.
also mit
erhalten Sie
Da Beschreibung ist ein Tupel mit Tupeln, wobei jedes Tupel beschreibt den header und den Datentyp für jede Spalte, die Sie extrahieren können die jeweils erste der Tupel mit
entspricht
InformationsquelleAutor der Antwort Tommy Strand
Hauptsächlich geht ab @Torxed Antwort, ich habe eine vollständige verallgemeinerte Satz von Funktionen zu finden, die das schema und die Daten in ein Wörterbuch:
Fühlen Sie sich frei zu gehen alle code-golf auf das zu reduzieren, die Linien, aber in der Zwischenzeit, es funktioniert!
😉
InformationsquelleAutor der Antwort Foo Stack
Ich weiß, diese Frage ist alt, aber es hat mir geholfen, herauszufinden, wie zu tun, was ich brauchte, das ist etwas anderes, als was die OP gefragt wurde, weshalb ich dachte, ich würde teilen, zu helfen, jemand anderes, muss das, was ich brauchte:
Wenn Sie möchten, um vollständig zu verallgemeinern und eine routine führt SQL-Select-Abfragen sind, sondern Sie verweisen müssen die Ergebnisse durch eine index-Nummer, keine Namen, Sie können dies tun, mit einer Liste von Listen anstelle von einem Wörterbuch. Jede Zeile des zurückgegebenen Daten dargestellt werden in der zurückgegebenen Liste als eine Liste von Feld(Spalte) Werte. Die Spaltennamen können Sie den ersten Eintrag der Liste zurückgegeben, also das Parsen der zurückgegebenen Liste in die aufrufende routine kann wirklich einfach und flexibel. Auf diese Weise kann die routine zu tun, die Datenbank nennen, braucht nicht zu wissen, etwas über das Daten-handling. Hier ist so eine routine:
InformationsquelleAutor der Antwort Grimravus
Ich wie @bryan und @foo-Stapel Antworten. Wenn Sie die Arbeit mit postgresql und Sie sind mit
psycopg2
Sie könnte etwas leckereien aus psycopg2 um das gleiche zu erreichen, durch die Angabe der cursorfactory einDictCursor
wenn Sie Ihren Mauszeiger aus dem Zusammenhang, wie diese:cur = conn.cursor( cursor_factory=psycopg2.extras.DictCursor )
So, jetzt können Sie die Ausführung Ihrer sql-Abfrage und Sie erhalten ein Wörterbuch zu Holen, Ihre Ergebnisse, ohne die Notwendigkeit, ordnen Sie Sie von hand.
Bitte beachten Sie, dass müssen Sie
import psycopg2.extras
für diese Arbeit.InformationsquelleAutor der Antwort matthaeus
Vorausgesetzt, Sie wissen, Sie Spaltennamen!
Auch hier gibt es drei verschiedene Lösungen,
du willst wohl das Letzte!
Das ist eine indizierte version, nicht die schönste Lösung aber es funktioniert.
Ein weiterer wäre, index der Spalte name als dictionary-key mit einer Liste innerhalb jedes Schlüssels mit den Daten in der Reihenfolge der Zeilennummern. by doing:
Schreiben dieses, ich verstehe, dass dies
for col in colnames
ersetzt werden könnte durchfor colindex in range(0, len())
aber Sie bekommen die Idee.Die späteren Beispiel tho nützlich sein würde, wenn nicht das abrufen aller Daten, aber eine Zeile zu einem Zeitpunkt, zum Beispiel:
Mit dict für jede Zeile von Daten
Immer tablenames (denke ich.. danke an Foo Stack):
eine Direktere Lösung von beargle unten!
InformationsquelleAutor der Antwort Torxed