樹莓派學習筆記——Python SQLite查詢曆史溫度

來源:互聯網
上載者:User

標籤:樹莓派   cpu溫度   

0 前言    本文通過Python SQLite查詢樹莓派CPU的溫度曆史資料,在前面的博文中已經介紹了樹莓派CPU溫度擷取,SQLite操作和利用Python插入曆史資料,下面再介紹如何查詢資料,本文主要分為三部分,第一部分為查詢所有溫度記錄,第二部分獲得最近一小時資料,第三部分為把獲得結果格式化為字典類型。    【相關博文】    【樹莓派學習筆記——索引博文】——更多博文請關注。    【樹莓派學習筆記——擷取樹莓派CPU溫度】    【樹莓派學習筆記——定時向yeelink上傳樹莓派CPU溫度】    【樹莓派學習筆記——SQLite操作簡述】    【樹莓派學習筆記——Python SQLite插入溫度記錄】
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 轉化為字典格式的Factory 方法    在進行網路傳輸的過程中,多數通過JSON資料格式進行交換,在python中字典格式能更好的轉換為JSON格式。
# -*- coding: utf-8 -*-import sqlite3def dict_factory(cursor, row):    d = {}    for idx, col in enumerate(cursor.description):        d[col[0]] = row[idx]    return d# 串連資料庫con = sqlite3.connect("cpu.db")# 指定Factory 方法con.row_factory = dict_factorycur = 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 指定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 參考資料    【1】Python SQLite說明文檔——sqlite3.Connection.row_factory    【2】Accessing an SQLite database with Python
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.