2016-08-02 2 views
0

Wenn Sie ein wenig nach unten scrollen Sie können diesen Code aus g.d.d.c sehen return SQL table as JSON in python:Wie behalte ich die Reihenfolge meiner SQL-Spalten in Python beim Speichern?

qry = "Select Id, Name, Artist, Album From MP3s Order By Name, Artist" 
# Assumes conn is a database connection. 
cursor = conn.cursor() 
cursor.execute(qry) 
rows = [x for x in cursor] 
cols = [x[0] for x in cursor.description] 
songs = [] 
for row in rows: 
    song = {} 
    for prop, val in zip(cols, row): 
    song[prop] = val 
    songs.append(song) 
# Create a string representation of your array of songs. 
songsJSON = json.dumps(songs) 

ich die Reihenfolge meiner Spalten nur behalten wollen.

Zum Beispiel, wenn ich print(cols) ich diese:

['id', 'Color', 'YCoord', 'Width', 'Height'] # right order 

Aber die Spalten in einer falschen Reihenfolge gespeichert:

[{"Color": "#FF99FF","Width"=345, "id"=43, "YCoord"=5784 "Height"=-546}...] # wrong order 

Je mehr Spalten wir hinzufügen, desto mehr zufällig wird es.

+2

Wörterbücher sind nicht geordnet, ersetzen Sie 'song = {}' durch 'song = OrderedDict()'. Sie müssen 'von Sammlungen importieren OrderedDict' an der Spitze Ihres Skripts –

+0

Das funktionierte für mich schnell und einfach. Ich danke dir sehr! – Proxos

Antwort

1

Python dict Speichern Sie die Reihenfolge der Schlüssel nicht, verwenden Sie stattdessen OrderedDict.

1

Wenn ich verstehe, Sie wollen Wörterbuch Schlüssel bestellt haben. Dies ist nicht möglich, da Wörterbücher Schlüssel nicht in einer bestimmten Reihenfolge halten, da Schlüssel nur für den Zugriff auf Elemente verwendet werden. Sie können immer Datenspalten mit rohen Spalteninformationen drucken:

cols = ["column1", "column2", "column3"] 
for row in data_from_database: 
    for col in cols: 
     print row[col] 
Verwandte Themen