Datan syöttäminen tietokantaan
453 523 618
LISÄYS: tietokannan avauskäskyyn on lisätty merkistön määrittely!
Luo tiedosto tallennus.py ja syötä sinne seuraavanlainen Python-skripti:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import MySQLdb
tietokanta = MySQLdb.connect("localhost", "monitor", "joku_salasana", "ltmittaukset",
charset='utf8', use_unicode=True)
kursori=tietokanta.cursor()
try:
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE() - INTERVAL 1 DAY, NOW(), 'keittiö', 21.7)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE() - INTERVAL 1 DAY, NOW(), 'kasvihuone', 24.5)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE() - INTERVAL 1 DAY, NOW(), 'autotalli', 18.1)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW() - INTERVAL 12 HOUR, 'keittiö', 20.6)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW() - INTERVAL 12 HOUR, 'kasvihuone', 17.1)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW() - INTERVAL 12 HOUR, 'autotalli', 16.2)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW(), 'kitchen', 22.9)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW(), 'kasvihuone', 25.7)""")
kursori.execute ("""INSERT INTO lampodata
values(CURRENT_DATE(), NOW(), 'autotalli', 18.2)""")
tietokanta.commit()
print "Data talletettu"
except:
print "Erhe tallennuksessa: tietokannan tiedot palautetaan"
tietokanta.rollback()
Suorita skripti:
pi@raspberrypi:~ $ python tallennus.py
Tietokannan ltmittaukset tauluun lampodata tallentuu skriptin sisältämien komentojen mukaan yhteensä yhdeksän riviä dataa, joista kukin rivi sisältää neljä kentällistä tietoa. Jos skripti suoritetaan uudestaan, tauluun tulee aina yhdeksän riviä lisää jokaisella skriptin suorituskerralla.
Taulun sisältöä voidaan tarkastella tekemällä tietokantaan hakuja. Käynnistä MySQL-käyttöliittymä monitor-käyttäjänä ja anna komento, jolla koko taulun sisältö tulostuu:
pi@raspberrypi:~ $ mysql -u monitor -p Enter password: mysql> USE ltmittaukset; mysql> SELECT * FROM lampodata; +------------+----------+------------+------------+ | lt_pvm | lt_aika | tila | lampotila | +------------+----------+------------+------------+ | 2017-09-29 | 14:59:22 | keittiö | 21.7 | | 2017-09-29 | 14:59:22 | kasvihuone | 24.5 | | 2017-09-29 | 14:59:22 | autotalli | 18.1 | | 2017-09-30 | 02:59:22 | keittiö | 20.6 | | 2017-09-30 | 02:59:22 | kasvihuone | 17.1 | | 2017-09-30 | 02:59:22 | autotalli | 16.2 | | 2017-09-30 | 14:59:22 | keittiö | 22.9 | | 2017-09-30 | 14:59:22 | kasvihuone | 25.7 | | 2017-09-30 | 14:59:22 | autotalli | 18.2 | +------------+----------+------------+------------+ 9 rows in set (0.00 sec) mysql>
Kokeillaan hakea esimerkiksi kaikki mittaukset, joiden tulos on ollut yli 20 astetta:
mysql> SELECT * FROM lampodata WHERE lampotila > 20;
+------------+----------+------------+------------+
| lt_pvm | lt_aika | tila | lampotila |
+------------+----------+------------+------------+
| 2017-09-29 | 14:59:22 | keittiö | 21.7 |
| 2017-09-29 | 14:59:22 | kasvihuone | 24.5 |
| 2017-09-30 | 02:59:22 | keittiö | 20.6 |
| 2017-09-30 | 14:59:22 | keittiö | 22.9 |
| 2017-09-30 | 14:59:22 | kasvihuone | 25.7 |
+------------+----------+------------+------------+
5 rows in set (0.00 sec)
mysql>
Tehdään seuraavaksi Python-skripti, jolla taulun sisältö saadaan tulostettua - sitä tarvitaan, kun halutaan saada mittaustulokset näkymään web-selaimella (seuraavalla alasivulla).