Seite 1 von 1

Probleme mit einfacher Datenbankabfrage

Verfasst: Freitag 3. Mai 2019, 20:24
von doerflia
Hallo ihr Python-Experten,

ich bin neu mit dieser doch sehr spannenden Programmiersprache unterwegs und
komme nicht auf meinen Fehler.

Konsole zeigt keinen an.


Codeausschnitt (sorry, da ich geschäftlich unterwegs bin, ist der Rest geheim):

Code: Alles auswählen

import psycopg2
from connect2db import connection
from connect2db import cursor

""" save db data to local variables, arrays, lists, etc. """
try:
   # table boundaries
   cursor.execute("SELECT * FROM boundaries")
   cursor.fetchall()
      
   for row in cursor:
      print("id= ", row[0],)
      print("segid= ", row[1],)
      print("segidx= ", row[2], "\n")
Die Verbindung (connection) steht und wird genauso importiert wie der cursor.

In connect2db.py habe ich eine gültige Verbindung, try und catch liefert keinen Fehler...
In meinem hier dargestellten Code, meldet auch der Editor und die Konsole keinen Fehler.
Gebe ich einen ungültigen SQL-Query ein, wird ein Fehler gemeldet.

Mein Problem:
Die print-Ausgabe zeigt absolut gar nicht an.

Die print-Ausgaben die danach noch in meinem Code folgen schon,
weshalb das Programm auch richtig durchläuft.

Daher meine Vermutung: Datentyp!
Nur die Konvertierung, die ich drin hatte, hat auch nicht funktioniert.
Daher habe ich diese aus den Code wieder raus genommen.

Vielleicht aber auch einfach nur eine falsche Denkweise...


Vielen Dank für eine schnelle & vermutlich auch leichte Antwort!
Ich komme nur momentan wirklich nicht weiter...

Grüße

Re: Probleme mit einfacher Datenbankabfrage

Verfasst: Freitag 3. Mai 2019, 21:39
von Sirius3
Der Code funktioniert gar nicht, weil ein einzelner try-Block ohne except nicht erlaubt ist.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 3. Zeichenketten sind keine Kommentare, diese werden mit # eingeleitet.
psycopg2 wird importiert aber nicht benutzt. Der Kommentar ist auch falsch, und kann nie richtig sein, denn es kann nur eine Klar definierten Datentyp als Ergebnis geben.
`connection` sollte keine globale Variable sein, also auch nicht in einem Modul vorkommen, und cursor sind etwas sehr kurzlebiges, was man bei jeder Aktion neu erzeugt. Ein Modul nur für eine Datenbankverbindung ist normalerweise nicht genug, damit es ein Modul rechtfertigt.
*-Selects vermeiden, weil es unmöglich macht, an den Datenbanktabellen etwas zu ändern, ohne befürchten zu müssen, irgendwo eine Änderung im Code übersehen zu haben. Gibt immer konkrete Feldnamen an.
Du liest mit `fetchall` alle Ergebnisse Deiner Abfrage und wirfst sie weg. Eine weitere Schleife über die restlichen Ergebnisse ist folglich leer.