樹莓派學習筆記——Python SQLite插入溫度記錄

來源:互聯網
上載者:User

標籤:樹莓派   sqlite   python   

0 前言    本文使用python向SQLite資料庫中插入樹莓派溫度資料,SQLite資料庫中包含一張只包含三個欄位的記錄表——參數名稱,時間和溫度值。本文重點解釋Python操作SQlite的具體方法,由於網上資料眾多,重複部分不再複述只做到具體情況具體分析。    【相關博文】    【樹莓派學習筆記——索引博文】——更多博文請關注。    【樹莓派學習筆記——擷取樹莓派CPU溫度】    【樹莓派學習筆記——定時向yeelink上傳樹莓派CPU溫度】    【樹莓派學習筆記——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/shDBNAME="cpu.db"rm -f $DBNAMEecho 開始插入資料sqlite3 $DBNAME < create-table-only.sqlecho 插入完成    【簡要說明】    【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 timeimport sqlite3def get_cpu_temp():    # 開啟檔案    file = open("/sys/class/thermal/thermal_zone0/temp")    # 讀取結果,並轉換為浮點數    temp = float(file.read()) / 1000    # 關閉檔案    file.close()    return tempdef 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.7RPi.CPU|2014-08-03 10:41:41|48.7RPi.CPU|2014-08-03 10:42:41|49.2RPi.CPU|2014-08-03 10:43:41|48.7RPi.CPU|2014-08-03 10:44:41|48.7RPi.CPU|2014-08-03 10:45:41|49.2
3 開機後台運行    【啟動指令碼】——auto-start.sh    在該目錄下再建立一個auto-start.sh指令碼,具體內容如下#!/bin/bashcd /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 參考資料    【1】SQLite 教程 | w3cschool菜鳥教程    【2】Python SQLite3協助文檔
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.