ich versuche mit Pony ORM eine Selectionanfrage mit order by Klausel auszuführen. Dazu habe ich zwei Methoden auspropbiert:
Code: Alles auswählen
sel = select((f.Name, f.id) for f in Firma).order_by(Firma.Name)
[codebox=text file=Unbenannt.txt]"NotImplementedError: Ordering by attributes is limited to queries which return simple list of objects. Try use other forms of ordering (by tuple element numbers or by full-blown lambda expr)"[/code]
Dann habe ich eine weiter Variante ausprobiert:
Code: Alles auswählen
for f in Firma.select(lambda f: f.Name) \
.order_by((Firma.Name)):
dic[f.Name] = f.id
print ("=== f.Name", f.Name)
dic[f.Name] = f.id
print(" === dic[f.Name]", dic[f.Name])
[codebox=text file=Unbenannt.txt]=== f.Name A
=== dic[f.Name] 10
=== f.Name B
=== dic[f.Name] 11
=== f.Name C
=== dic[f.Name] 12
=== f.Name Neckermann
=== dic[f.Name] 7
=== f.Name Otto
=== dic[f.Name] 6
=== f.Name Quelle
=== dic[f.Name] 3
=== f.Name Testfirma
=== dic[f.Name] 9
=== f.Name The Pearlfactory
=== dic[f.Name] 8[/code]
Das erzeugte Dictionary:
Code: Alles auswählen
dic {'Testfirma': 9, 'Quelle': 3, 'C': 12, 'The Pearlfactory': 8, 'B': 11, 'Otto': 6, 'A': 10, 'Neckermann': 7}
Edit:
Ich habe noch was herausgefunden. Das Problem scheint nicht die Selectanweisung zu sein, sondern eher das Dictionray:
Folgender Code ergibt die unten stehende Ausgabe:
Code: Alles auswählen
sel = select((f.Name, f.id) for f in Firma).order_by(1, -2)
....
for selectin in sel:
print("selectin: ", selectin)
firm_dic[selectin[0]] = selectin[1]
print("firm_dic in for", firm_dic)
f.Name |f.id
----------------+----
A |10
B |11
C |12
Neckermann |7
Otto |6
Quelle |3
Testfirma |9
The Pearlfactory|8
selectin: ('A', 10)
firm_dic in for {'A': 10}
selectin: ('B', 11)
firm_dic in for {'A': 10, 'B': 11}
selectin: ('C', 12)
firm_dic in for {'C': 12, 'A': 10, 'B': 11}
selectin: ('Neckermann', 7)
firm_dic in for {'C': 12, 'A': 10, 'Neckermann': 7, 'B': 11}
selectin: ('Otto', 6)
firm_dic in for {'C': 12, 'A': 10, 'Otto': 6, 'Neckermann': 7, 'B': 11}
selectin: ('Quelle', 3)
firm_dic in for {'A': 10, 'Quelle': 3, 'B': 11, 'C': 12, 'Neckermann': 7, 'Otto': 6}
selectin: ('Testfirma', 9)
firm_dic in for {'A': 10, 'Testfirma': 9, 'Quelle': 3, 'B': 11, 'C': 12, 'Neckermann': 7, 'Otto': 6}
selectin: ('The Pearlfactory',

firm_dic in for {'A': 10, 'Testfirma': 9, 'Quelle': 3, 'B': 11, 'C': 12, 'Neckermann': 7, 'The Pearlfactory': 8, 'Otto': 6}
[/code]
Wieso wird "A" und "B" richtig einsortiert, "C" auf einmal vorn angehangen und "Otto" auf einmal dazwischen?
VG niesel