Seite 1 von 1
Mysql - IndentationError: unexpected indent
Verfasst: Montag 9. September 2019, 08:29
von wfog3435
Hallo zusammen,
ich habe folgendes Problem, ich versuche Sensordaten vom DHT22 von einem Raspberry in die Datenbank eines zweiten Raspberry zu bekommen.
Mein Code sieht wie Folgt aus.
Code: Alles auswählen
#!/usr/bin/python
import Adafruit_DHT
import sys
import mysql.connector
# Sensor DHT22
sensor = Adafruit_DHT.DHT22
pin = 4
# Verbindung zur Datenbank
try:
connection = mysql.connector.connect (host = "192.168.1.10", user = "root", passwd = "passwd", db = "Temp_logger")
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
except:
print ("Keine Verbindung zum Server")
sys.exit(0)
cursor = connection.cursor()
curs.execute("INSERT INTO office_hum_tb (datum, uhrzeit, hum) VALUES (CURRENT_DATE(), NOW(), %.2f);" % humidity)
db.commit()
print("Done")
connection.commit()
cursor.close()
ich bekomme folgende Fehlermeldung:
Code: Alles auswählen
pi@raspberrypi:~ $ sudo python db.py
File "db.py", line 19
curs.execute("INSERT INTO office_hum_tb (datum, uhrzeit, hum) VALUES (CURRENT_DATE(), NOW(), %.2f);" % humidity)
^
IndentationError: unexpected indent
Kann mir jemand sagen was ich da falsch mache?
Danke im Voraus!
Re: Mysql - IndentationError: unexpected indent
Verfasst: Montag 9. September 2019, 08:40
von sparrow
Python unterscheidet Codeblöcke anhand der Einrückung (englisch: Indentation). Und dem Interpreter leuchtet nicht ein, warum die die bemängelte Zeile einrückst.
Offensichtlich hast du da Code wild zusammen kopiert. Denn dein Cursor heißt "cursor" und du willst ihn dann als "curs" verwenden (cursor ist schöner).
Re: Mysql - IndentationError: unexpected indent
Verfasst: Montag 9. September 2019, 10:00
von Sirius3
Keine nakten Excepts. Die "Fehlerbehandlung" ist auch nur eine Fehlerverschleierung und kann ersatzlos gestrichen werden. `db` existiert nicht und damit auch kein `db.commit`.
In SQL-Statements formatiert man keine Werte hinein! Dafür gibt es Platzhalter. Das Datenbankdesign ist kaputt: Datum und Uhrzeit sind ein "TIMESTAMP WITH TIMEZONE"-Feld.
Code: Alles auswählen
import Adafruit_DHT
import sys
import mysql.connector
# Sensor DHT22
sensor = Adafruit_DHT.DHT22
pin = 4
connection = mysql.connector.connect (host = "192.168.1.10", user = "root", passwd = "passwd", db = "Temp_logger")
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
cursor = connection.cursor()
curs.execute("INSERT INTO office_hum_tb (datum, hum) VALUES (NOW(), %s);", [humidity])
cursor.close()
connection.commit()
Re: Mysql - IndentationError: unexpected indent
Verfasst: Dienstag 10. September 2019, 08:24
von wfog3435
Danke für eure Hilfe, ich habe jetzt den Code von Sirius3 verwendet die Verbindung zur Datenbank ist ok er schreibt auch Datum und Uhrzeit in die DB aber bei der Luftfeuchtigkeit kommt nur Null
Code: Alles auswählen
#!/usr/bin/python
import Adafruit_DHT
import sys
import mysql.connector
# Sensor DHT22
sensor = Adafruit_DHT.DHT22
pin = 4
connection = mysql.connector.connect (host = "192.168.1.10", user = "root", passwd = "passwd", db = "Temp_logger")
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
cursor = connection.cursor()
cursor.execute("INSERT INTO office_hum_tb (datum, uhrzeit, hum) VALUES (CURRENT_DATE(), NOW(), %s);", [humidity])
cursor.close()
connection.commit()
Re: Mysql - IndentationError: unexpected indent
Verfasst: Dienstag 10. September 2019, 08:34
von __blackjack__
@wfog3435: Dann ist es wohl sehr trocken im Büro. Oder meinst Du den SQL-Wert NULL? Du solltest vielleicht testen ob `humidity` den Wert `None` hat.
Re: Mysql - IndentationError: unexpected indent
Verfasst: Dienstag 10. September 2019, 08:54
von wfog3435
@_blackjack_: danke das war es!
Re: Mysql - IndentationError: unexpected indent
Verfasst: Dienstag 10. September 2019, 09:20
von Sirius3
`datum` und `uhrzeit` sollten immer noch nur EIN Feld sein, Abkürzungen sollte man auch in Datenbanken vermeiden, `hum` -> `humidity`.
Auch der Tabellenname ist etwas kryptisch. `tb` soll wohl für Tabelle ist aber überflüssig, da es klar ist, dass es um eine Tabelle handelt.
Auch Datenbankschemate sollten sinnvolle Namen haben, Da Du die Luftfeuchtigkeit in die Datenbank schreibst, ist wohl `Temp` die Abkürzung für Temporär, wird also regelmäßig wieder geleert. Falls das nicht der Fall ist, solltest Du dringend den Namen ändern.
Re: Mysql - IndentationError: unexpected indent
Verfasst: Dienstag 10. September 2019, 09:38
von __blackjack__
Und bei `office_hum_tb` könnte man auch noch den Verdacht bekommen, das in dieser Tabelle die Luftfeuchtigkeit im Büro gespeichert wird und in anderen Tabellen dann die Luftfeuchtigkeit in anderen Räumen – was von DB-Entwurf auch falsch wäre, denn in Tabellennamen gehören keine Daten, die gehören *in* die Tabellen.