码迷,mamicode.com
首页 > 数据库 > 详细

树莓派学习笔记——Python SQLite查询历史温度

时间:2014-08-05 00:50:58      阅读:642      评论:0      收藏:0      [点我收藏+]

标签:树莓派   cpu温度   

0 前言
    本文通过Python SQLite查询树莓派CPU的温度历史数据,在前面的博文中已经介绍了树莓派CPU温度获取,SQLite操作和利用Python插入历史数据,下面再介绍如何查询数据,本文主要分为三部分,第一部分为查询所有温度记录,第二部分获得最近一小时数据,第三部分为把获得结果格式化为字典类型。

1 查询记录条数
    新建一个名为query-cpu-temp.py的文件,文件内容如下。
# -*- coding: utf-8 -*-
import sqlite3

# 连接数据库
con = sqlite3.connect("cpu.db")
cur = con.cursor()

name = 'RPi.CPU'
# 查询记录总数
cur.execute("select count(*) from temps where name=(?);", (name, ))
total = cur.fetchone()

# 返回元组类型
print type(total)
print type(total[0]) 
print total[0]
    【简要说明】
    【1】cur.execute("select count(*) from temps where name=(?);", (name, )) 查询表中字段name为RPi.CPU的记录总数
    【2】cur.fetchone() 获得一条记录,返回的结果为元组类型。
    【3】total[0],返回的结果为只有一个元素的元组类型,total[0]为记录总数,类型为Int。
    【4】返回结果
<type ‘tuple‘>
<type ‘int‘>
166

2 查询最近一小时温度
    重新修改query-cpu-temp.py,具体内容如下
# -*- coding: utf-8 -*-
import sqlite3

# 连接数据库
con = sqlite3.connect("cpu.db")
cur = con.cursor()

name = 'RPi.CPU'
# 查询数据库,获得最近一小时的记录
cur.execute('''SELECT * FROM temps
                WHERE name=(?) AND tdatetime > datetime('now', 'localtime', '-1 hours')
                ORDER BY tdatetime ASC;''', (name, ))
# 获得所有结果                
rows = cur.fetchall()

for row in rows:
    print row
    【简要说明】
    【1】WHERE name=(?) AND tdatetime > datetime(‘now‘, ‘localtime‘, ‘-1 hours‘) ,查询一小时之前的温度参数, ‘localtime‘表示本时区时间。
    【2】cur.fetchall() 获得符合条件的所有记录
    【3】返回的结果为列表类型,而类表中的每个元素为元组类型
(u‘RPi.CPU‘, u‘2014-08-04 20:07:53‘, 46.5)
(u‘RPi.CPU‘, u‘2014-08-04 20:12:53‘, 46.5)
(u‘RPi.CPU‘, u‘2014-08-04 20:17:53‘, 46.5)
(u‘RPi.CPU‘, u‘2014-08-04 20:22:54‘, 47.1)
(u‘RPi.CPU‘, u‘2014-08-04 20:27:54‘, 47.1)
(u‘RPi.CPU‘, u‘2014-08-04 20:32:54‘, 47.6)
(u‘RPi.CPU‘, u‘2014-08-04 20:37:54‘, 46.5)
(u‘RPi.CPU‘, u‘2014-08-04 20:42:54‘, 47.6)
(u‘RPi.CPU‘, u‘2014-08-04 20:47:54‘, 47.1)
(u‘RPi.CPU‘, u‘2014-08-04 20:52:54‘, 47.1)
(u‘RPi.CPU‘, u‘2014-08-04 20:57:54‘, 47.6)
(u‘RPi.CPU‘, u‘2014-08-04 21:02:55‘, 47.6)

3 转化为字典格式的工厂方法
    在进行网络传输的过程中,多数通过JSON数据格式进行交换,在python中字典格式能更好的转换为JSON格式。
# -*- coding: utf-8 -*-
import sqlite3

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d

# 连接数据库
con = sqlite3.connect("cpu.db")
# 指定工厂方法
con.row_factory = dict_factory
cur = con.cursor()

name = 'RPi.CPU'
# 查询数据库,获得最近一小时的记录
cur.execute('''SELECT * FROM temps
                WHERE name=(?) AND tdatetime > datetime('now', 'localtime', '-1 hours')
                ORDER BY tdatetime ASC;''', (name, ))
               
rows = cur.fetchall()

for row in rows:
    print row
    【简单说明】
    【1】def dict_factory(cursor, row): 元组类型转换为字典类型,该函数来自python sqlite说明文档。
    【2】con.row_factory = dict_factory 指定工厂方法
    【3】返回结果,请注意()变为了{},表明返回结果为字典类型。
{‘tdatetime‘: u‘2014-08-04 20:22:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 20:27:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 20:32:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.6}
{‘tdatetime‘: u‘2014-08-04 20:37:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 46.5}
{‘tdatetime‘: u‘2014-08-04 20:42:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.6}
{‘tdatetime‘: u‘2014-08-04 20:47:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 20:52:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 20:57:54‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.6}
{‘tdatetime‘: u‘2014-08-04 21:02:55‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.6}
{‘tdatetime‘: u‘2014-08-04 21:07:55‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 21:12:55‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.1}
{‘tdatetime‘: u‘2014-08-04 21:17:55‘, ‘name‘: u‘RPi.CPU‘, ‘temperature‘: 47.6}

4 总结
    【1】获得数据库记录的方法有 fetchone和fetchall。
    【2】默认情况下返回元组结果
    【3】需要通过修改row_factory属性,把元组类型转换为字典类型

5 参考资料

树莓派学习笔记——Python SQLite查询历史温度,布布扣,bubuko.com

树莓派学习笔记——Python SQLite查询历史温度

标签:树莓派   cpu温度   

原文地址:http://blog.csdn.net/xukai871105/article/details/38375729

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!