SQL Statement Wrapper...

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

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?

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:

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:

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten