Datan lukeminen tietokannasta
458 528 623
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
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])
<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>
<< Edellinen (5) Datan syöttäminen tietokantaan | Sivu 6/9 | Seuraava >> (7) Datan lukeminen web-palvelimella |