Tietokoneiden näyttöjä, joissa näkyy kuvaa automaatiolaboratorion laitteistosta. Monitoreiden takana näkyy sama laitteisto kuin kuvissa.

timohei.net / Opintojaksot / Älykkään sähkölaitteen projekti / Tietokanta /
Datan lukeminen tietokannasta

Tämän sivun ohjeissa on kerrottu, miten data saadaan luettua tietokannasta. Ohjeeseen ei ole kirjattu python-rivejä, jotka ovat samoja kuin edellisen sivun ohjeessa; ts. ennen alla olevia ohjelmariviä täytyy ensin määritellä merkistökoodaus (utf-8-rivi), tuoda MySQLdb-kirjasto (import-rivi), määritellä tietokantayhteys (mySQLdb.connect-rivi) ja avata yhteys (cursor-rivi)!

Tehdään Python-skripti (esim. lukeminen.py), jolla taulun sisältö saadaan tulostettua. SELECT-lauseen *-merkki tarkoittaa, että lampodata-taulusta valitaan kaikki sarakkeet (kultakin riviltä):

kursori.execute ("SELECT * FROM lampodata")

print "\nPäivä     	Aika		Tila		Lämpötila"
print "==========================================================="

for kentta in kursori.fetchall():
  print str(kentta[0])+"\t"+str(kentta[1])+"\t"+\
    kentta[2]+"\t"+str(kentta[3])

Huomaa, että edellä kenttien väleihin laitetaan sarkainmerkit (\t), jotta kentät tulostuvat edellisen kentän pituudesta riippumatta* samoihin kohtiin! (*) Jos tulostettavan merkkijonon pituus ylittää sarkainvälin, tulostuu seuraava merkkijono vasta seuraavaan sarkainkohtaan. Jos tulostettavien merkkijonojen pituus vaihtelee sarkainvälin yli ja ali, tulostuvat seuraavat merkkijonot sarkainvälin verran "vinksin vonksin".

Suorita python-skripti:

pi@raspberrypi:~ $ python lukeminen.py

Päivä        Aika       Tila        Lämpötila
===========================================================
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  

Kokeillaan hakea esimerkiksi kaikki mittaukset, joiden tulos on ollut yli 20 astetta. Tätä varten tarvitsee muokata vain skriptin lukeminen.py SELECT-lausetta:

...
kursori.execute ("SELECT * FROM lampodata WHERE lampotila > 20")
...

Suoritetaan muokattu skripti:

pi@raspberrypi:~ $ python lukeminen.py

Päivä        Aika       Tila        Lämpötila
===========================================================
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  

Lisää verkkomateriaalia Pythonin ja MySQL:n käytöstä

  1. Python MysQL Database Access
  2. Python MySQL Query
  3. SQL Tutorial (w3schools.com)

Tietokannan lukeminen nettisivulle

Python-skriptiin lisättävä osuus

kursori.execute ("SELECT * FROM lampodata LIMIT 1")
  for kentta in kursori.fetchall():
      return render_template('lt.html', k1=kentta[0], k2=kentta[1], k3=kentta[2], k4=kentta[3])

Template lt.html

<html>
 <head>
  <meta charset="utf-8">
 </head>
  <body>
    <p>Kentta 1 {{ k1 }}</p>
    <p>Kentta 2 {{ k2 }}</p>
    <p>Kentta 3 {{ k3 }}</p>
    <p>Kentta 4 {{ k4 }}</p>
  </body>
</html>
Päivitetty 28.8.2022

<<  Edellinen
(5) Datan syöttäminen tietokantaan
Sivu 6/9Seuraava >>
(7) Datan lukeminen web-palvelimella
© Timo Heikkinen | timo piste heikkinen at oamk piste fi