MySQL und Python: Unterschied zwischen den Versionen

Aus CyberWiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(17 dazwischenliegende Versionen desselben Benutzers werden 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 12: Zeile 12:
  mysql> FLUSH PRIVILEGES;
  mysql> FLUSH PRIVILEGES;
  mysql> quit
  mysql> quit
Hier wäre eine gute Gelegenheit, die MySQL-Datenbanken auf einen USB-Stick zu verschieben -> [[MySQL-Datenbank verschieben]].
==Tabellen definieren==
==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:<br />
'''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:
Nun steigen wir mit dem neuen User in die Datenbank ein:
  mysql -u pi -p
  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.

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.