Probleme mit einfacher Datenbankabfrage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
doerflia
User
Beiträge: 20
Registriert: Freitag 3. Mai 2019, 14:49

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
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

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