SQL Statement Wrapper...

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 28. Februar 2006, 16:12

Für SQLite hab ich meinen SQL Wrapper umgebaut bzw. angepasst. Er ist allerdings noch nicht richtig getestet...

Sourcen: http://pylucid.python-hosting.com/file/ ... atabase.py

Was ich mich nun Frage, in wie fern würde es wohl Sinn machen die Ergebnisse (also fetchall) statt mit return, mit yield als Generator zurück geben zu lassen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 28. Februar 2006, 18:15

jens hat geschrieben:Was ich mich nun Frage, in wie fern würde es wohl Sinn machen die Ergebnisse (also fetchall) statt mit return, mit yield als Generator zurück geben zu lassen?
Hi Jens!

Das ist gefährlich, da man bei "fetchall" keinen Generator erwartet. Im Gegenteil. Man erwartet sich eine Liste oder ein Tupel, in dem man nach belieben Daten raus holen kann.

Wie wäre es mit einem zusätzlichen Parameter für "fetchall" um die Verwendung von Generatoren explizit einzuschalten. So geht es aber auch:

Code: Alles auswählen

for row in iter(cursor.fetchone, None):
   print row
Da "fetchone" None zurück gibt, wenn keine Zeile mehr vorhanden ist, kann "None" als Abbruchkriterium für "iter()" eingesetzt werden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 28. Februar 2006, 18:19

Hi Jens!

Intern, also im Hintergrund, kannst du ja Generatoren verwenden. Es hätte sogar Vorteile für "fetchone". Du musst dich nur darum kümmern, dass bei "fetchall" KEIN Generator zurück gegeben wird. Also "tuple()" anwenden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 1. März 2006, 10:06

Hm. Vielleicht lass ich das lieber mal :) Ich kenn mich mit Generatoren eh nicht so richtig aus und weiß nicht, welche Vorteile diese überhaupt haben...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten