listen verarbeiten python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
köttbullar
User
Beiträge: 34
Registriert: Donnerstag 6. August 2015, 19:23

Hallo,

ich mache gerade eine DB abfrage und speichere die daten in ein json objekt

Code: Alles auswählen

conn = psycopg2.connect("dbname='test' user='test' host='127.0.0.1' password='test'")
        cur = conn.cursor()
        cur.execute("""
        SELECT
        id
        FROM tabelle
        LIMIT 10
        """)
        test = json.dumps(cur.fetchall())
        print test
als ergebnis erhalte ich folgende 2 dimensionale liste:
[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]

für die weiterverarbeitung, bräuchte ich aber folgende list:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

kann mir jemand sagen was ich falsch mache?

vielen Dank
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@köttbullar: was falsch ist, ist Deine Erwartung, was fetchall zurückliefert. Verarbeite das Ergebnis von fetchall so, dass es Dein gewünschtes Format ergibt.
köttbullar
User
Beiträge: 34
Registriert: Donnerstag 6. August 2015, 19:23

und wie mache ich das?
Astorek
User
Beiträge: 72
Registriert: Samstag 24. Januar 2009, 15:06
Kontaktdaten:

Code: Alles auswählen

oldlist = json.dumps(cur.fetchall())
newlist = list()
for array in oldlist:
    for element in array:
        newlist.append(element)
Sollte eigentlich selbsterklärend sein...

EDIT: @Sirius3 unter mir:
Sirius3 hat geschrieben:@Astorek: ... und ziemlich falsch. über einen String zu iterieren und dann nochmal über die einzelnen Zeichen ist wohl nicht, was Du wolltest. Dazu trägt vielleicht auch der falsch gewählte Name "oldlist" für einen String bei.
Huch, das ist ein String? Wusste ich nicht, ich hab mich auf den Hinweis des Threaderstellers verlassen, dass der Befehl eine 2-Dimensionale Liste ausspuckt^^. Danke für die Berichtigung.
Zuletzt geändert von Astorek am Montag 26. Oktober 2015, 15:03, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Astorek: ... und ziemlich falsch. über einen String zu iterieren und dann nochmal über die einzelnen Zeichen ist wohl nicht, was Du wolltest. Dazu trägt vielleicht auch der falsch gewählte Name "oldlist" für einen String bei.

@köttbullar: wie man mit Listen arbeitet, solltest Du inzwischen gelernt haben. Du lernst ja nichts dabei, wenn man Dir immer wieder die grundlegendsten Grundlagen vorkaut.
köttbullar
User
Beiträge: 34
Registriert: Donnerstag 6. August 2015, 19:23

ich will auch nicht alles vorgekaut bekommen.
aber fetchall zu formatieren wie es vorher beschrieben wurde habe ich nichts gefunden.
muss ich da vielleicht fetchall.format() machen?
nach welchen begriffen soll ich da am besten suchen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das ``fetchall`` ist so ok, Du musst das Ergebnis in eine Liste transformieren. Dafür wäre der Einsteiger freundliche Weg das Iterieren über das Ergebnis von ``fetchall`` und dann die einzelnen Werte aus den Tupeln (Zeilen) an eine neue Liste "anhängen" (im Englischen "append").

Das sollte man eigentlich auch als Anfänger mit Hilfe des offiziellen Tutorials leicht umsetzen können.

Tipp: Löse das in einer Shell mit einer Dummy Ausgangsstruktur ohne DB Anbindung!

Eleganter wäre ein List Comprehension Ausdruck.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn das Endergebnis nicht stimmt, mach' die Zwischenschritte kleiner, um dorthin zu kommen. Heißt z.B. sich einfach mal die Zwischenergebnisse per `print` ausgeben lassen.

Guck' doch einfach mal, wie die Daten in `cur.fetchall()` aussehen. Dann sollte auch der Schritt zur einfachen Liste einfach sein. Stichworte siehe Hyperions Post.

Gruß, noisefloor
Antworten