<p>Hallo zusammen</p>
<p>Aktuell verusche ich aus Werte aus einer Tabelle in eine andere Tabelle zu verschieben.<br>Leider ist das aktuelle Vorhaben nicht von Erfolg gekrönt, dia einige meiner Fehlder "NULL" Werte enthalten, kann Python das nicht konvertieren und als float in der neuen Tabelle abspeichern. Somit bricht es mit einer Fhlermeldung ab...</p>
<p>Anbei noch der Code-Ausschnitt aus dem Script.<br></p>
<pre data-file="" data-highlighter="php" data-line="1">cur_PI = db_PI.cursor()
# Batterie 2 Werte:
Batt_2_Tranche=""
while True:
try:
#Execute the SQL command
query=("SELECT Datum,UnixZeit, max(BatterieSpannung), max(BatterieStrom), max(PanelSpannung), max(PanelLeistung) FROM SolarAnlage where UnixZeit > %s and UnixZeit < %s group by Datum")
cur_PI.execute(query, (Letztes_UnixDatum,unix))
# cur_PI.execute(query, (1500606400,unix))
Batt_2_Tranche = cur_PI.fetchall()
print "Abfrage erfolgreich"
except:
# Rollback in case there is any error
print "Abfrage fehlgeschlagen"
cur_PI.close()
db_PI.close
break
for data in Batt_2_Tranche:
# print str(data[0]) +";"+ str(data[1]) +";"+ str(float(data[2])) +";"+ str(float(data[3])) +";"+ str(float(data[4])) +";"+ str(float(data[5]))
# Werte einfügen
cur_PI = db_PI.cursor()
#Daten in MySQL schreiben
while True:
sql = (""" INSERT INTO Statistik (Datum,UnixDatum,BattV_max,BattI_max,PanelV_max,PanelW_max) VALUES (%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE BattV_max=(%s),BattI_max=(%s),PanelV_max=(%s),PanelW_max=(%s) """, (data[0], data[1], float(data[2]), float(data[3]), float(data[4]), float(data[5]),float(data[2]),float(data[3]),float(data[4]),float(data[5])))
# print sql
try:
# print "Writing to database..."
#Execute the SQL command
cur_PI.execute(*sql)
#Commit your changes in the database
db_PI.commit()
print "Write Complete"
except:
# Rollback in case there is any error
db_PI.rollback()
print "Failed writing to database"
cur_PI.close()
break
[/php]
Die Ausgegebene Fehlermeldung lautet:
[code]TypeError: float() argument must be a string or a number</pre>
<p>Wie kriege ich diese Fehlermeldung weg? Kann ich wieterhin auf float(data[x]) zugreifen oder muss ich etwas anders verwenden, sprich die Rückgabe vom SQL zuerst auf gültigkeit prüfen und erst dann übergeben?</p>
<p>Gruss Dani</p>
Insert or Update in DB schlägt fehl ("NULL" Werte)
-
dll-live -
26. September 2017 um 18:07 -
Erledigt
-
-
Insert or Update in DB schlägt fehl ("NULL" Werte)? Schau mal ob du hier fündig wirst!
-
Hallo Dani !
Eine Möglichkeit wäre, schon bei der Erstellung der Tabelle einem Tabellenfeld einen eindeutigen Defaultwert zuzuweisen, der später als Fehler erkannt wird, weil er ausserhalb des möglichen Bereiches liegt. z.B:
CREATE TABLE solardata (
....
leistung INT DEFAULT ’29999’,
.....
)
Wenn die höchste leistung 10000 beträgt ist der Wert 29999 (im Gegensatz von 0) fehlerhaft, und kann ausgefiltert werden.Servus !
-
Sali RTFM
Besten Dank für den Input, gerne würde ich jedoch beim "NULL" Wert bleiben, das wäre nämlich DB-Standard.
Gibt es sonst noch Vorschläge / Tipps?
Gruss Dani
-
Ich denke du meinst diese Zeile:
Pythonsql = (""" INSERT INTO Statistik (Datum,UnixDatum,BattV_max,BattI_max,PanelV_max,PanelW_max) VALUES (%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE BattV_max=(%s),BattI_max=(%s),PanelV_max=(%s),PanelW_max=(%s) """, (data[0], data[1], float(data[2]), float(data[3]), float(data[4]), float(data[5]),float(data[2]),float(data[3]),float(data[4]),float(data[5])))
? Dann mach doch sowas: statt float try_float und die Funktion so:
Pythondef try_float(value): try: return float(value) except TypeError: return None # oder "NULL", wie du es brauchst um in die andere DB NULL zu schreiben... # Edit: None scheint schon richtig zu sein: https://stackoverflow.com/a/14370784/5952681
Oder verstehe ich dich falsch?
-
Also ich würde die umwandlung in Float in eine Funktion auslagern.
Dort in einem try/execpt Block die Float Konvertierung durchführen, die TypeError Exeption abfangen und prüfen ob "NULL" als Inhalt ist, wenn ja NULL so lassen, wenn nein hast du wirklich einen Fehler
EDIT: Linusg war schneller und schöner
-
Sali Linus
Sali HofeiBesten Dank für euere Hilfe.
Werde das mal versuchen - evtl schaff ich es und sonst frage ich nochmals nach Hilfe.Gruss Dani
-
Sali zusammen
Es hat einwandfrei funktionerit. Alle meine (gewünschten) werte sind nun in der neuen Tabelle der DB.
Nochmals herzlichen Dank.
Gruss Dani
-
Bitte Thread noch auf erledigt setzen
-
Sali Hofei
herzlichen Dank für die erinnerung ist mir glatt entgangen.
Gruss Dani
-
thema erledigt - noch mit der neuen Software am lernen....
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!