SQLITE daten weilerverarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lalay
User
Beiträge: 9
Registriert: Freitag 12. Juli 2019, 11:26

hey ich habe mit hilfe von SQLite eine Datenbank erstellt... und möchte nun aus dieser etwas auslesen...

Code: Alles auswählen

def daten_auslesen():
    cur.execute('SELECT Schild FROM Worldof')
    data = cur.fetchone()
    print(data)
wenn ich das ganze laufen lasse wird (8,) ausgegeben und ich möchte nun mit dieser zahl weiterarbeiten:

Code: Alles auswählen

Schild = daten_auslesen()
if Schild == 8:
    print("Hat funktioniert")
else:
    print("mist")
leider sagt er mir immer das Schild nicht 8 ist ...
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lalay hat geschrieben: Dienstag 27. August 2019, 16:55 leider sagt er mir immer das Schild nicht 8 ist ...
Der Wert ist ja auch nicht 8 sondern (8, ). Das ist ein Tupel mit einem Element. Wie du darauf zugreifst ist dir sicher bekannt, sonst schau noch mal in die Dokumentation. Abgesehen davon gibst du den Wert aus der Funktion gar nicht zurück.

Übrigens, was bringt dich darauf, dass diese Frage nach "Allgemeine Fragen" und nicht in das Unterforum "Datenbankprogrammierung mit Python" gehört?
Zuletzt geändert von /me am Dienstag 27. August 2019, 17:04, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

fetchone liefert immer eine Zeile, und die als Tupel. Auch wenn da nur ein Element drin ist. Siehst du ja auch in deiner Ausgabe: (8,) ist eben ein Tupel, mit einem Element, und das ist 8. Wenn du da ran willst gibt's verschieden Moeglichkeiten,

schild, = cur.fetchone()

ist eine,

schild = cur.fetchone()[0]

eine andere.

Was dir dann natuerlich auch noch fehlt ist das "return schild" in daten_auslesen. Denn jetzt gibst du immer None zurueck, und das ist ja auch niemals 8.

Last but not least: magische Nummern so wie 8 sind doof. Benutz eine Konstante, zB

BUCKLE_SHIELD = 8

und pruefe darauf.
Benutzeravatar
__blackjack__
User
Beiträge: 14019
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man wenn man magische Nummern hat die irgendwie zusammengehören, statt einer einfachen Konstante auch ein `enum.Enum`-Objekt erstellen kann, beziehungsweise in diesem Fall vielleicht ein `enum.IntEnum`

Code: Alles auswählen

class Shield(IntEnum):
    # ...
    BUCKLE = 8
    # ...
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten