Seite 1 von 1

Tuple Problem

Verfasst: Dienstag 1. August 2006, 13:54
von de_master
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

Verfasst: Dienstag 1. August 2006, 14:20
von DatenMetzgerX

Code: Alles auswählen

c.execute(sql)
resultList = []
for i in range(test):
    result = c.fetchone()
    resultList.append(result)
return resultListcode

Verfasst: Dienstag 1. August 2006, 15:16
von birkenfeld
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.

Verfasst: Dienstag 1. August 2006, 15:29
von de_master
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.

Verfasst: Donnerstag 3. August 2006, 21:11
von Joghurt
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.

Verfasst: Freitag 4. August 2006, 07:30
von BlackJack
Oder man iteriert einfach über den Cursor nachdem man die SQL Anweisung abgesetzt hat.

Verfasst: Freitag 4. August 2006, 08:46
von gerold
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
:-)