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

Tuple Problem

Beitragvon de_master » Dienstag 1. August 2006, 13:54

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)

Beitragvon DatenMetzgerX » Dienstag 1. August 2006, 14:20

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

Beitragvon birkenfeld » Dienstag 1. August 2006, 15:16

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

Beitragvon de_master » Dienstag 1. August 2006, 15:29

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.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Donnerstag 3. August 2006, 21:11

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

Beitragvon BlackJack » Freitag 4. August 2006, 07:30

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

Beitragvon gerold » Freitag 4. August 2006, 08:46

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.

Wer ist online?

Mitglieder in diesem Forum: r.barrios