MySQL und Python: Unterschied zwischen den Versionen

Aus CyberWiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 2: Zeile 2:
Zuerst müssen wir den MySQL Server und die Python-Module für den Datenbankzugriff installieren.
Zuerst müssen wir den MySQL Server und die Python-Module für den Datenbankzugriff installieren.
  sudo apt-get install mysql-server python-mysqldb
  sudo apt-get install mysql-server python-mysqldb
Danach legen wir eine Datenbank ''sensor'' an:
Danach legen wir eine '''Datenbank sensor''' an:
  $ mysql -u root -p
  $ mysql -u root -p
  Enter password:
  Enter password:
Zeile 17: Zeile 17:
Für die Speicherung der Sensorwerte benötigen wir zwei Tabellen. In die erste (werte) schreiben wir die 5-Minuten-Daten der Sensoren und in der zweiten (hochtief) sollen die Maxima bzw. Minima Platz finden. Die Tabellen haben folgenden Aufbau. Dabei bedeutet (3,1) 3 Stellen, davon 1 Nachkommastelle, das Vorzeichen muss nicht berücksichtigt werden:<br />
Für die Speicherung der Sensorwerte benötigen wir zwei Tabellen. In die erste (werte) schreiben wir die 5-Minuten-Daten der Sensoren und in der zweiten (hochtief) sollen die Maxima bzw. Minima Platz finden. Die Tabellen haben folgenden Aufbau. Dabei bedeutet (3,1) 3 Stellen, davon 1 Nachkommastelle, das Vorzeichen muss nicht berücksichtigt werden:<br />
'''Tabelle: werte'''
'''Tabelle: werte'''
id        9999999999 int(10)      auto_increment
utc      9999999999 int(10)
  timestamp JJMMTTHHMM char(10)
  timestamp JJMMTTHHMM char(10)
  temp1    -99.9      decimal(3,1)  (Temperatur 1 C)
  temp      -99.9      decimal(3,1)  (Temperatur C)
  temp2    -99.9     decimal(3,1)  (Temperatur 2 C)
  hum      99.9       decimal(3,1)  (Luftfeuchtigkeit %)
hum1      999.9      decimal(4,1)  (Luftfeuchtigkeit 1 %)
  humraw    99.9       decimal(3,1)  (Luftfeuchtigkeit % unkorrigiert)
  hum2      999.9     decimal(4,1)  (Luftfeuchtigkeit 2 %)
  hpa      9999.9    decimal(5,1)  (Luftdruck hpa)
  hpa      9999.9    decimal(5,1)  (Luftdruck hpa)
tempint  -99.9      decimal(3,1)  (Interne Gehäusetemperatur)
'''Tabelle: hochtief'''
'''Tabelle: hochtief'''
id        9999999999 int(10)      auto_increment
  timestamp JJMMTT    char(6)
  timestamp JJMMTT    char(6)
  temp1h    -99.9      decimal(3,1)  (hoch Temperatur 1 C)
  temph    -99.9      decimal(3,1)  (hoch Temperatur C)
  temp1t    -99.9      decimal(3,1)  (tief Temperatur 1 C)
  tempt    -99.9      decimal(3,1)  (tief Temperatur C)
  temp2h    -99.9     decimal(3,1)  (hoch Temperatur 2 C)
  humh     999.9      decimal(4,1)  (hoch Luftfeuchtigkeit %)
temp2t    -99.9      decimal(3,1)  (tief Temperatur 2 C)
  humt     999.9      decimal(4,1)  (tief Luftfeuchtigkeit %)
hum1h    999.9      decimal(4,1)  (hoch Luftfeuchtigkeit 1 %)
  hum1t    999.9     decimal(4,1)  (tief Luftfeuchtigkeit 1 %)
hum2h    999.9      decimal(4,1)  (hoch Luftfeuchtigkeit 2 %)
hum2t    999.9      decimal(4,1)  (tief Luftfeuchtigkeit 2 %)
  hpah      9999.9    decimal(5,1)  (hoch Luftdruck hpa)
  hpah      9999.9    decimal(5,1)  (hoch Luftdruck hpa)
  hpat      9999.9    decimal(5,1)  (tief Luftdruck hpa)
  hpat      9999.9    decimal(5,1)  (tief Luftdruck hpa)

Aktuelle Version vom 23. Januar 2019, 17:34 Uhr

MySQL installieren und Datenbank anlegen

Zuerst müssen wir den MySQL Server und die Python-Module für den Datenbankzugriff installieren.

sudo apt-get install mysql-server python-mysqldb

Danach legen wir eine Datenbank sensor an:

$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE sensor;
mysql> USE sensor;

Jetzt legen wir einen User account für diese Datenbank an und vergeben die Zugriffsrecht. password ist unser gewünschtes Passwort.

mysql> CREATE USER 'pi'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON sensor.* TO 'pi'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

Hier wäre eine gute Gelegenheit, die MySQL-Datenbanken auf einen USB-Stick zu verschieben -> MySQL-Datenbank verschieben.

Tabellen definieren

Für die Speicherung der Sensorwerte benötigen wir zwei Tabellen. In die erste (werte) schreiben wir die 5-Minuten-Daten der Sensoren und in der zweiten (hochtief) sollen die Maxima bzw. Minima Platz finden. Die Tabellen haben folgenden Aufbau. Dabei bedeutet (3,1) 3 Stellen, davon 1 Nachkommastelle, das Vorzeichen muss nicht berücksichtigt werden:
Tabelle: werte

id        9999999999 int(10)       auto_increment
utc       9999999999 int(10)
timestamp JJMMTTHHMM char(10)
temp      -99.9      decimal(3,1)  (Temperatur C)
hum       99.9       decimal(3,1)  (Luftfeuchtigkeit %)
humraw    99.9       decimal(3,1)  (Luftfeuchtigkeit % unkorrigiert)
hpa       9999.9     decimal(5,1)  (Luftdruck hpa)
tempint   -99.9      decimal(3,1)  (Interne Gehäusetemperatur)

Tabelle: hochtief

id        9999999999 int(10)       auto_increment
timestamp JJMMTT     char(6)
temph     -99.9      decimal(3,1)  (hoch Temperatur C)
tempt     -99.9      decimal(3,1)  (tief Temperatur C)
humh      999.9      decimal(4,1)  (hoch Luftfeuchtigkeit %)
humt      999.9      decimal(4,1)  (tief Luftfeuchtigkeit %)
hpah      9999.9     decimal(5,1)  (hoch Luftdruck hpa)
hpat      9999.9     decimal(5,1)  (tief Luftdruck hpa)

Diese Tabelle beinhaltet Datensätze mit folgenden Werten in timestamp:

JJ9999 - Jahres-Hoch-Tief-Werte
JJMM99 - Monats-Hoch-Tief-Werte
JJMMTT - Tages-Hoch-Tief-Werte

Nun steigen wir mit dem neuen User in die Datenbank ein:

mysql -u pi -p
mysql> use sensor;

Mit create table werden die Datenfelder definiert (nach dem letzten Feld kein Komma!):

create table werte (
    timestamp char(10),
    temp1 decimal(3,1),
    ...
);
create table hochtief (
    timestamp char(6),
    temp1h decimal(3,1),
    ...
);

Sollen die Definitionen geändert werden kann man das mit dem Befehl "alter" vornehmen. Z.B.

alter table werte modify temp1 decimal(5,1);

Abschließend sollten noch ein primary Key und ein alternate Key hinzugefügt werden. Der folgende Befehl fügt ein Feld "id" mit dem Attribut auto_increment an erster Stelle hinzu (für beide Tabellen durchführen):

mysql> ALTER TABLE sensor.werte ADD COLUMN id int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;

Das Feld timestamp machen wir mit folgendem Befehl zum alternate Key. Auch hier für beide Tabellen durchführen.

mysql> ALTER TABLE sensor.werte ADD INDEX timestamp (timestamp);

Indizes können entfernt werden mit

mysql> DROP INDEX timestamp ON sensor.werte;
mysql> SHOW INDEX FROM sensor.werte;

zeigt die verfügbaren Indizes und mit

mysql> describe hochtief;
mysql> describe werte;

können wir überprüfen, ob wir alles richtig gemacht haben.

Mit Tabellen arbeiten

Tabelle leeren:

mysql> delete from tabelle;

Tabelle leeren und Autoincrementwert zurücksetzen:

mysql> truncate table tabelle;

Hier wird die gesamte Tabelle gelöscht und neu aufgebaut. Das geht bei großen Tabellen auch schneller.