相比 MySQL 而言,SQLite 更为轻便、易于维护和部署。本文使用Python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表——参数名称,时间和温度值。本文重点解释Python操作SQlite的具体方法,由于网上资料众多,重复部分不再复述只做到具体情况具体分析。

1 创建数据库和空表

【create-table-only.sql】

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE temps(

name DEFAULT 'RPi.CPU',

tdatetime DATETIME DEFAULT (datetime('now', 'localtime')),

temperature NUMERIC NOT NULL

);

COMMIT;

【简要说明】

【1】数据库包含三个字段,其中两个字段有默认值。

【2】温度值不能为空。

【3】DEFAULT与NOT NULL约束配合,简化插入操作。

【create-table-only.sh】

#!/bin/sh

DBNAME="cpu.db"

rm -f $DBNAME

echo 开始插入数据

sqlite3 $DBNAME < create-table-only.sql

echo 插入完成

【简要说明】

【1】chmod a+x create-table-only.sh增加可执行权限

【2】运行之后在同目录下创建名为cpu.db的数据库

2 Python插入操作

新建一个名为db-insert-temp.py的文件,具体内容如下

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import time

import sqlite3

def get_cpu_temp():

# 打开文件

file = open("/sys/class/thermal/thermal_zone0/temp")

# 读取结果,并转换为浮点数

temp = float(file.read()) / 1000

# 关闭文件

file.close()

return temp

def insert_cpu_temp(temp):

# 连接数据库

conn=sqlite3.connect('cpu.db')

curs=conn.cursor()

# 插入数据库

strtemp = "%.1f" %(temp);

curs.execute("INSERT INTO temps(temperature) VALUES((?))", (strtemp,))

conn.commit()

# 关闭数据库

conn.close()

def main():

while True:

temp = get_cpu_temp()

insert_cpu_temp(temp)

time.sleep(5*60)

if __name__ == '__main__':

main()

【简单说明】

【1】conn=sqlite3.connect(‘cpu.db’) 连接数据库。

【2】curs=conn.cursor() 获得游标。游标可理解为文件操作句柄,有了它就可以摆弄”cpu.db”了。

【3】重点注意curs.execute(“INSERT INTO temps(temperature) VALUES((?))”, (strtemp,))

【3.1】利用name和tdatetime的默认约束,此处仅插入温度值

【3.2】execute函数中必须使用占位符(?),不能使用字符串格式化方法。如果还有两个占位符,建议写成这样VALUES((?),(?))

【3.3】参数化查询时 (strtemp,)为Python元组数据类型,如果只有一个元素时逗号不可省略。如果含有两个参数,建议写成这样(paraA,paraB)

【4】勿忘提交操作conn.commit()

【5】勿忘关闭操作conn.close()

【查询插入结果】

可在控制台中输入 sqlite3 cpu-temp “SELECT * FROM temps;”,返回结果如下。

RPi.CPU|2014-08-03 10:40:40|48.7

RPi.CPU|2014-08-03 10:41:41|48.7

RPi.CPU|2014-08-03 10:42:41|49.2

RPi.CPU|2014-08-03 10:43:41|48.7

RPi.CPU|2014-08-03 10:44:41|48.7

RPi.CPU|2014-08-03 10:45:41|49.2

3 开机后台运行

【启动脚本】——auto-start.sh

在该目录下再新建一个auto-start.sh脚本,具体内容如下

#!/bin/bash

cd /home/pi/python-works/cpu-temp

python db-insert-temp.py &

【简单说明】

【1】python db-insert-temp.py & 后台运行db-insert-temp.py

【2】勿忘修改执行权限,chmod a+x auto-start.sh

【修改启动项】——/etc/rc.local

在最后一行exit 0之前增加

# 树莓派温度保存到数据库中

/home/pi/python-works/cpu-temp/auto-start.sh start

【重新启动树莓派】

sudo reboot

重启之后再次查看表中内容,将会发现记录一条一条增加。

4 总结

【1】python SQLite参数化操作时必须使用占位符?

【2】参数为Python元组类型,需要注意元素个数为1的情况。

【3】插入操作成功,结合Flask尝试查询操作。

5 参考资料

python创建sqlite3数据库_树莓派使用 Python + SQLite 建立温度数据库相关推荐

  1. python创建文件名称_如何在Python中创建递增文件名?

    我正在创建一个程序,它将创建一个文件并将其保存到文件名为sample.xml的目录中.当我尝试再次运行程序时保存文件,它会将旧文件覆盖到新文件中,因为它们具有相同的文件名.如何增加文件名,以便每当我尝 ...

  2. python创建sqlite3数据库_Python之Sqlite3数据库基本操作

    在一些小的应用中,难免会用到数据库,Sqlite数据库以其小巧轻便,无需安装,移植性好著称,本文主要以一个简单的小例子,简述Python在Sqlite数据库方面的应用,仅供学习分享使用,如有不足之处, ...

  3. python创建sqlite3数据库_Python连接SQLite数据库

    Python连接SQLite数据库 SQLite 是一种嵌入式数据库,它的数据库就是一个文件.由于 SQLite 本身是 C 写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在 iOS 和 ...

  4. 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...

    1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...

  5. python使用md5加密_如何使用Python创建自己的加密货币

    python使用md5加密 With the current rise of cryptocurrencies, blockchain is creating a buzz in the techno ...

  6. python做bi系统_如何使用Python创建可视化对象

    早前,Power BI就已经支持使用Python创建可视化对象了,当你遇到自定义程度较高的可视化对象时,Python就大大的派上了用场:那么我们如何使用呢?接下来小悦就为各位伙伴们介绍一下吧~ 首先, ...

  7. 用python创建微信机器人_用Python创建微信机器人

    原标题:用Python创建微信机器人 文/裸睡的猪哥 图片来源于网络 微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一 ...

  8. 树莓派是python的应用领域吗_树莓派为什么采用python语言为主要开发语言?

    回复内容: 他老爸想让更多小孩学会编程,去用电脑实现自己有趣的想法.本来打算只让这个机器跑Python(是只跑Python,像学习机一样的东西.并没有想过在上面弄一个完整的linux).但是后来动真格 ...

  9. python进行数据查询_如何进行python数据库查询?(实例解析)

    在这篇文章之中我们来了解一下关于python数据库的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于python查询数据库中 ...

最新文章

  1. ubuntu + oepncv + PCL + realsenseSDK + ROS + OpenVino开发环境搭建
  2. redis操作大数据
  3. 算法导论 第六章 堆排序 习题6.5-8 k路合并排序
  4. LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!
  5. JavaScript数组结构与算法——数组详解(中)
  6. 换工位解决ssh 卡住的背后
  7. 说说封杀BT的几个理由
  8. SCM供应链管理系统的优点
  9. hdu4282 A very hard mathematic problem
  10. 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性
  11. 什么是 STL 文件
  12. 有关第四章css的介绍
  13. 偏振器件传输矩阵matlab编程,关于传输矩阵法模拟光子晶体的MATLAB编程
  14. 七参数对不同坐标系统的转换
  15. 银河麒麟系统设置变更
  16. Windows下将文件夹下所有的文件名导出成生成TXT文件
  17. 基于WEB的Office文档打印——浏览器中静默打印Word文档
  18. 汇川MD500E变频器开发方案
  19. 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘
  20. 高赞 GitHub 项目盘点:美观的中文排版样式

热门文章

  1. 数字图像处理:视觉系统中的坐标系介绍
  2. Python中递归字符串反转
  3. JSONPath 解析 JSON 内容详解(翻译自 github)
  4. Python 数据可视化:WordCloud 词云的构建
  5. 设计模式1—创建型模式
  6. Effective Java~3. 私有Constructor 或Enum 强化单例
  7. Spring Data JPA 从入门到精通~Naming命名策略详解及其实践
  8. mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询
  9. 记一次棋牌游戏 cocos2d-x LUA脚本解密
  10. 来自百度的一篇如何关闭Centos7的防火墙以及如何永久关闭防火墙的指令教学【转载】