MySQL und Python: Unterschied zwischen den Versionen
Geli (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Geli (Diskussion | Beiträge) |
||
(9 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 | Danach legen wir eine '''Datenbank sensor''' an: | ||
$ mysql -u root -p | $ mysql -u root -p | ||
Enter password: | Enter password: | ||
Zeile 15: | Zeile 15: | ||
==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:<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) | ||
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''' | '''Tabelle: hochtief''' | ||
id 9999999999 int(10) auto_increment | |||
timestamp JJMMTT char(6) | 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) | |||
hpah 9999.9 decimal( | |||
hpat 9999.9 decimal( | |||
Diese Tabelle beinhaltet Datensätze mit folgenden Werten in timestamp: | Diese Tabelle beinhaltet Datensätze mit folgenden Werten in timestamp: | ||
JJ9999 - Jahres-Hoch-Tief-Werte | JJ9999 - Jahres-Hoch-Tief-Werte | ||
Zeile 42: | Zeile 41: | ||
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> | mysql> use sensor; | ||
Mit create table werden die Datenfelder definiert: | Mit create table werden die Datenfelder definiert (nach dem letzten Feld kein Komma!): | ||
create table werte ( | create table werte ( | ||
timestamp char(10), | timestamp char(10), | ||
temp1 decimal( | temp1 decimal(3,1), | ||
... | ... | ||
); | ); | ||
create table hochtief ( | create table hochtief ( | ||
timestamp char(6), | timestamp char(6), | ||
temp1h decimal( | 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.