python创建sqlite3数据库_树莓派使用 Python + SQLite 建立温度数据库
相比 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 建立温度数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonweb管理电脑_Python
- 下一篇: python脚本式编程_Python编程