Hallo zusammen,
ich habe da ein paar Erklärungsbedürfnisse zum Umgang mit Variablen in Python bzw. das Verarbeiten in Mysql.
Ich lese Daten aus einem Textfile ein:
Code:
with open(/pfad/zur/datei) as file:
for _ in range(53):
file.readline()
daten = '%.1f' % float(file.readline()[6:])
file.close()
Die relevanten Daten sind in Zeile 53 der Datei zu finden.
Frage 1: Welchen Typ hat nun die Variable "daten"?
Wenn der Wert eine bestimmte Grenze überschreitet, ist er unplausibel und ich möchte "NULL" in die Datenbank schreiben. Dazu prüfe ich:
Code:
if daten > grenze:
daten = None
Frage 2: Wenn nun diese Bedingung erfüllt wird und daten auf "None" gesetzt wird, von welchem Typ ist dann "daten"?
Nun möchte ich den ausgelesenen Wert in eine mysql-Datenbank schreiben.
Dazu verwende ich:
Code:
cursor = db_connection.cursor()
cursor.execute(
"""insert into datenbank set daten='%s' ON DUPLICATE KEY UPDATE daten='%s''""", float(daten))
(Der Code ist unvollständig und möglicherweise funktioniert es so auch nicht, aber es geht mir um das prinipielle Verständnis beim Einfügen.
Fall 1: Meine Daten waren plausibel, also nicht leer, dann muss ich in die Spalte der Datenbank ein Float einfügen, was ich mit float(daten) erreiche.
Frage 3: Was hat es mit dem '%s' auf sich?
Frage 4: Was ist der Unterschied zu %s, also ohne die Hochkommata?
Fall 2: Waren die eingelesenen Werte unplausibel, so ist ja jetzt die Variable daten leer. Jetzt funktioniert mein "insert" nicht mehr, die Fehlermeldung:
Code:
TypeError: float() argument must be a string or a number, not 'NoneType'
sagt mir, dass ich hier einen Typenkonflikt habe.
Wie macht man das richtig?
Danke für Erläuterungen
michel_vaclav
Lesezeichen