Mysql - IndentationError: unexpected indent

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
wfog3435
User
Beiträge: 11
Registriert: Donnerstag 8. August 2019, 08:46

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!
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

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).
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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()

wfog3435
User
Beiträge: 11
Registriert: Donnerstag 8. August 2019, 08:46

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()
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
wfog3435
User
Beiträge: 11
Registriert: Donnerstag 8. August 2019, 08:46

@_blackjack_: danke das war es!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`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.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten