Select Abfrage liefert zuviele Zeichen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Virtex
User
Beiträge: 9
Registriert: Freitag 24. Februar 2017, 23:06

Hallo zusammen,

ich habe mich nun mit dem Select ein wenig beschäftigt und habe nun eine funktionierende Abfrage, die allerdings noch falsche Daten liefert.

Code: Alles auswählen

cur=con.cursor()
cur.execute('Select ID from Stati where Status = 1')
result = cur.fetchall()

for r in result:
	print(r)
	
cur.close()
con.commit()
Wenn ich damit die Datenbank auslese und wiedergebe, erhalte ich als Ergebniss das folgende:
(1L,)
(2L,)
(5L,)
Allerdings steht in der Datenbank in den betreffenden Feldern nur 1 / 2 oder 5. Weder die Klammern noch das L düften dort auftauchen.
Daher nun die Frage, wo das herkommt und wieso das dareinkommt. Es werden lediglich die Werte die in der Datenabnk stehen (1,2,5 z.Zt.)
benötigt.

Zur Datenbank ist zu sagen, dass das Feld ID als INT konfiguriert ist und es um eine MySQL DB geht.

Hat da jemand eine Idee?

Gruß

Virtex
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@Virtex: fetchall liefert eine Liste von Tupel, da ja auch mehr als ein Wert pro Zeile durch SELECT abgefragt werden kann. Das L deutet an, dass es sich um LongInt-Werte handelt, warum die MySQL-Anbindung da Longs liefert weiß ich auch nicht, ist aber auch kein Problem, da sich Longs und Ints transparent ineinander umwandeln lassen.
Virtex
User
Beiträge: 9
Registriert: Freitag 24. Februar 2017, 23:06

Hi Sirius,

das mit dem umwandeln scheint nicht so einfach zu sein, da ich dann nur folgenden Fehler erhalte:
File "reboot.py", line 26, in <module>
print(int(r))
TypeError: int() argument must be a string or a number, not 'tuple'
oder muss ich das an anderer Stelle in int() konvertieren?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@Virtex: wie ich und die Fehlermeldung sagen, handelt es sich um ein Tuple; falls Du nicht weißt, was das ist, solltest Du ein Tutorial durchgehen. Und es ist nicht nötig, ein long in ein int umzuwandeln, da es (sogut) wie keine Situation gibt, wo das einen Unterschied macht.
Antworten