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.