.st0{fill:#FFFFFF;}

Raspberry Pi

Understanding The Python SQLite3 Query Process 

 February 22, 2019

By  Richard Park

Join Our Mailing List

We publish fresh content each week. Read how-to's on Arduino, ESP32, KiCad, Node-RED, drones and more. Listen to interviews. Learn about new tech with our comprehensive reviews. Get discount offers for our courses and books. Interact with our community.

One email per week, no spam, unsubscribe at any time.

The Internet is comprised from an odd collection of hardware devices, software programs (code), and networking components connected together over the air and through physical conduits enabling a modern world access to goods, services, and information almost instantaneously. Most of us have very little idea of how any of this works!

The Raspberry Pi Full Stack Raspbian course is a second generation offering  from Tech Explorations delivering a whirlwind tour of how the Internet works. When finished a student will understand how a Raspberry Pi is used to remotely monitor and archive temperature and humidity at home from any web browser, from any location in the world. The end-to-end process is no different than services offered by any of the major commercial services, except the student builds and has complete control and access to the entire system. This particular posting assumes the user is also studying the Raspberry Pi Full Stack Raspbian course.

Having studied this course for some time, I keep discovering processes that I’ve successfully completed, but details I do not fully understand. When I encounter one of these details my problem solving strategy is to extract the key code from the project, examining it, modifying it, play with it in a simple form to see how it works then put it back into the project. The purpose of this and future postings will be to share my thoughts and study the feedback to understand a process fully.

Much of what I work with professionally (I teach Network Engineering) deals with examining list and dictionary formatted information using various vendor specific APIs (Application Programming Interfaces). Ultimately, after the Internet conduits have connected  the hardware, all that remains is the code and more specifically the API code. APIs connect to other APIs with the result being some sort of a service. In the context of the Tech Explorations Raspberry Pi Full Stack (RPiFS) project, sophisticated monitoring, archiving, and dynamic plotting of environmental information.

The example code that follows uses Python interactive commands and  a short Python program to query the RPi-FS SQLite3 lab_app.db database. Then with some filtering and formatting,  extracts the 20 latest temperature/ humidity values from the lab_app.db.

Interactive commands displaying all records using Python CLI:

Link to Interactive Command Listing on GitHub (open in a new tab)

(lab_app) root@RPiFSv2:/var/www/lab_app# python3

import sqlite3
conn=sqlite3.connect(‘/var/www/lab_app/lab_app.db’)
curs=conn.cursor()
curs.execute(“SELECT * FROM temperatures”)
#NOTE: This is informational feedback. Don’t Type
temperatures = curs.fetchall()
print (temperatures)
conn.close()
exit()

myDBquery.py program to query the lab_app.db SQLite3 DB:

Link to myDBquery Code Listing on GitHub (open in a new tab)

#

myDBquery.py

Rich Park February 09, 2019

A program to query the temperature and humidities

from the RPiFSv2 Database

#

import sqlite3
import os # Allow for calls to the shell

os.system(‘clear’) # This call clears the screen. Very helpful for avoiding testing clutter.

conn=sqlite3.connect(‘/var/www/lab_app/lab_app.db’)
curs=conn.cursor()
curs.execute(“SELECT * FROM temperatures”)
temperatures = curs.fetchall()
curs.execute(“SELECT * FROM humidities”)
humidities = curs.fetchall()
conn.close()

Get the 20 most recent temperature and humidity readings

#######################################################
# myDBquery.py                                        #
#   Rich Park February 09, 2019                       #
#   A program to query the temperature and humidities #
#   from the RPiFSv2 Database                         #
#######################################################

import sqlite3
import os # Allow for calls to the shell

os.system('clear') # This call clears the screen. Very helpful for avoiding testing clutter.

conn=sqlite3.connect('/var/www/lab_app/lab_app.db')
curs=conn.cursor()
curs.execute("SELECT * FROM temperatures")
temperatures = curs.fetchall()
curs.execute("SELECT * FROM humidities")
humidities = curs.fetchall()
conn.close()

# Get the 20 most recent temperature and humidity readings
for item in range ((len(temperatures) - 20), len(temperatures)):
        # Do a bit of formatting to make the output more readable.
        # NOTE: the u"\u2103" entry displays the 'degrees centigrade symbol.
	print (item," Temperature -> ", str(("{:.2f}".format)(temperatures \
                [item] [2])),u"\u2103","  ", (temperatures[item][0]), sep='')
	print ("         Humidity    ", str(("{:.2f}".format)(humidities \
                [item] [2])),"%", sep='')
Sample Run of myDBquery
20 (edited) most recent temperature/humidity values:

Link to lab_app.db Sample Run Query Listing on GitHub (open in a new tab)

##############- SAMPLE RUN -#################################
 # Over 25,000 records had been collected at this time.
 
(lab_app) root@RPiFSv2:/var/www/lab_app# python3 myDBquery.py

24983 Temperature -> 22.40℃  2019-02-03 18:50:02
         Humidity    46.50%
      < clipped for brevity >
25000 Temperature -> 23.40℃  2019-02-03 21:40:02
         Humidity    46.90%

(lab_app) root@RPiFSv2:/var/www/lab_app# 

Tags


You may also like

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

I’m thrilled to announce that my upcoming course, Introduction to Electronics, is just a few weeks away from being released on both Udemy and Tech Explorations. This course was designed with the absolute beginner in

Read More
New Course Coming soon: Introduction to Electronics

Robotics is one of the most engaging and effective ways to teach programming, problem-solving, and critical thinking. Today, we’re diving into the CrowBot Bolt, a programmable robot car explicitly designed for STEAM (Science, Technology, Engineering,

Read More
Exploring the CrowBot Bolt: A Hands-On Robotics Kit for STEAM Education