2016-03-23 4 views
0


Ich muss alle Spaltennamen und Typen aus einer Oracle-Datenbank abrufen, und dann abhängig von einem Spaltentyp verschiedene Dinge tun.Andere Sortierreihenfolge in Dictionay und Liste

Mein Code ist:

for tab in table_list: 
    tables = {}#tabel list 
    table_types = {} #for each table dictionary column_name: type 
    cur.execute("select column_name, data_type from all_tab_cols where owner = 'AAA' and table_name = '"+tab+"' and hidden_column = 'NO' order by column_id asc") 
    res = cur.fetchall() 
    for type in res: 
     table_types[type[0]] = type[1] 
    tables[tab]=table_types 

    print res 
    print table_types 

Für res erhalte ich:

[('COAG_ID', 'NUMBER'), ('COAG_CONT_ID', 'NUMBER'), ('COAG_CONT_OPER_ID', 'NUMBER'), ('COAG_CAGT_ID', 'NUMBER'), etc... 

Und für table_types i erhalten:

{'COAG_DELIVERY_PAYER': 'VARCHAR2', 'COAG_AGREEMENT_DATE': 'DATE', 'COAG_HANDSET_FULL_PRICE': 'NUMBER', etc... 

Meine Frage ist: Warum sind nicht die Werte in der gleichen Reihenfolge? Werte in table_types werden direkt aus res übernommen, also warum sind sie in anderer Reihenfolge?

Grüße
Pawel

+0

Um die Werte aus der Oracle-Datenbank zurückgegeben werden immer in der gleichen Reihenfolge, fügen Sie eine 'ORDER BY' Klausel, um Ihren Code zB zu gewährleisten:' ORDER BY column_name' – Ollie

+1

Ah ja, es war nicht auf meinem Bildschirm angezeigt wird, es sei denn i hob es hervor. Ich werde mich da raushalten, da ich sehr wenig über Python weiß. – Ollie

Antwort

2

table_types ist Wörterbuch und das Wörterbuch nicht speichern oder Anzeige in der gleichen Reihenfolge Sie eingefügt haben.

Die Reihenfolge des Wörterbuchs hängt damit zusammen, wie sie intern arbeiten und in welcher Reihenfolge sie in der Hash-Tabelle landen. Dies hängt wiederum vom Schlüssel-Hash-Wert, der Reihenfolge, in der sie eingefügt wurden, und von der Python-Implementierung ab, die Sie verwenden.

Die Reihenfolge ist willkürlich (aber nicht zufällig) und es wird nie nützlich sein zu wissen, welche Reihenfolge es sein wird.

+1

Wenn Sie in der gleichen Reihenfolge möchten, verwenden Sie OrderedDict [link] (https://docs.python.org/2/library/collections.html#collections.OrderedDict) –

Verwandte Themen