Tuple Problem

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
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Hallo @ all,
ich stehe gerade total aufm Schlauf und hoffe ihr könnt mir weiter helfen.

Ich bekomme von der Datenbank Listen. Diese möchte ich in eine Tuple packen.

Code: Alles auswählen

test = c.execute(sql)
      for i in range(test):
            result = c.fetchone()
            resultList[i] = result
return resultList
Die for Schleife läuft so oft wie Einträge in der DB vorhanden sind. Jetzt möchte ich jede Liste die ich in der result Variable speichere in ein Tuple packen. Das Tuple soll dann zurückgegeben werden.

Wie muss ich das schreiben? Leider haben mir meine Tutorials nicht weitergeholfen :(

Gruss Michael
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Code: Alles auswählen

c.execute(sql)
resultList = []
for i in range(test):
    result = c.fetchone()
    resultList.append(result)
return resultListcode
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ist "test" wirklich ein Integer? "range" ist da sonst fehl am Platz.

Wenn der DB-Adapter der DBAPI-Spezifikation genügt (PEP 249), dann würde ich das so machen:

Code: Alles auswählen

c.execute(sql)
resultList = c.fetchall()
Oder, wenn du unbedingt fetchone() verwenden willst:

Code: Alles auswählen

c.execute(sql)
resultList = []
for row in iter(c.fetchone, None):
    resultList.append(row)
Ohne dass du uns allerdings sagst, was für ein DB-Adapter das ist, können wir dir schlecht weiterhelfen.
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

birkenfeld hat geschrieben:Ist "test" wirklich ein Integer? "range" ist da sonst fehl am Platz.

Wenn der DB-Adapter der DBAPI-Spezifikation genügt (PEP 249), dann würde ich das so machen:

Code: Alles auswählen

c.execute(sql)
resultList = c.fetchall()
Oder, wenn du unbedingt fetchone() verwenden willst:

Code: Alles auswählen

c.execute(sql)
resultList = []
for row in iter(c.fetchone, None):
    resultList.append(row)
Ohne dass du uns allerdings sagst, was für ein DB-Adapter das ist, können wir dir schlecht weiterhelfen.
Ich verwende MySQLdb.
Ein fetchall() ist natürlich super. Dann verwende ich das.

Gruss Michael

PS: Ja, test ist ein Integer. Gibt an wie viele vorhanden sind, bzw. zurückgegeben werden.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

de_master hat geschrieben:Ein fetchall() ist natürlich super. Dann verwende ich das.
Achtung! fetchall ist kein Iterator. Das heisst, es holt erst alle Ergebnisse und packt sie in eine große Liste in den Speicher.
Bei 100 Ergebnissen ist das kein Problem, wenn du jedoch 500000 Zeilen hast, wird es ungünstig. In dem Falle kann man sich mit fetchmany einen iterator schreiben.
BlackJack

Oder man iteriert einfach über den Cursor nachdem man die SQL Anweisung abgesetzt hat.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BlackJack hat geschrieben:Oder man iteriert einfach über den Cursor nachdem man die SQL Anweisung abgesetzt hat.
Hi!

Ich kenne bis jetzt nur "pySQLite" und "psycopg2", bei denen das so funktioniert. Das steht ja auch nicht in der DB-API 2.0 -- oder habe ich da was übersehen?

Es würde mich aber wirklich freuen, wenn dieses Feature zum Standard wird.

@All: Hat das schon mal jemand mit anderen DB-Schnittstellen ausprobiert? Bei welchen Schnittstellen funktioniert das mit dem Iterieren über den Cursor bereits so?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten