樹莓派學習筆記——SQLite操作簡述

來源:互聯網
上載者:User

標籤:樹莓派   sqlite   

0 前言    本文介紹如何在樹莓派中利用SQLite資料庫儲存CPU溫度資料。SQLite是一款輕量級零設定資料庫,非常適合在樹莓派和其他嵌入式系統中使用。SQLite文檔詳細資料豐富,本文不會詳細解釋SQLite資料庫操作的方方面面,只能結合具體情境按需說明。本文介紹的SQLite技巧也可以在其他平台使用,並不局限於樹莓派。    本文繼續折騰樹莓派溫度,需要從中可以玩出新花樣。
    【相關博文】    【樹莓派學習筆記——索引博文】——更多博文請關注。    【樹莓派學習筆記——擷取樹莓派CPU溫度】    【樹莓派學習筆記——定時向yeelink上傳樹莓派CPU溫度】
1 建立表和插入資料    建立一個名為insert.sql檔案,檔案具體內容如下:
PRAGMA foreign_keys=OFF;BEGIN TRANSACTION;CREATE TABLE temps(    name DEFAULT 'RPi.CPU',     tdatetime DATETIME DEFAULT (datetime('now', 'localtime')),     temperature NUMERIC NOT NULL);    INSERT INTO temps VALUES('RPi.CPU', datetime('now', 'localtime', '-3 hours'), 40.1);INSERT INTO temps(name, tdatetime, temperature) VALUES('RPi.CPU', datetime('now', 'localtime', '-2 hours'), 40.2);INSERT INTO temps(tdatetime, temperature) VALUES(datetime('now', 'localtime', '-1 hours'), 40.3);INSERT INTO temps(temperature)VALUES(40.4);COMMIT;
    【簡要說明】——若干細節請注意    【1】建立表,表中包括3個欄位,分別為name,tdatetime和 temperature。    【2】name DEFAULT ‘RPi.CPU‘,name欄位的預設值為‘RPi.CPU‘,SQLite中字串被單引號包裹。    【3】tdatetime DATETIME DEFAULT (datetime(‘now‘, ‘localtime‘)), tdatetime欄位預設值為目前時間。    【4】datetime(‘now‘, ‘localtime‘)中的localtime表示本時區時間,如果沒有該參數則為格林尼治時間。    【5】DEFAULT (datetime(‘now‘, ‘localtime‘)), 括弧絕對不能少。DEFault中的運算式一定要被括弧包裹。    【6】採用多種不同的插入方法,第一種不含欄位名稱,第二種包含欄位名稱,第三種,由於建立表格時有預設值,可以使用更簡潔的插入方法,例如            INSERT INTO temps(temperature) VALUES(40.4);
2 建立表和插入資料    建立一個名為create-table.sh指令碼,具體內容如下#!/bin/shrm -f cpu.dbecho 開始插入資料sqlite3 cpu.db < insert.sqlecho 插入完成    【簡要說明】    【1】資料庫名稱為cpu-temp.db    【2】sqlite3 cpu.db < insert.sql 把insert.sql指令碼插入到資料庫中,insert.sql包括兩個步驟,建立表並向表中插入資料。    【3】修改執行許可權 chmod a+x create-tabel.sh,然後執行./create-table.sh    【4】SQLite也有命令列模式,但是命令沒有曆史查詢功能,寫錯了還要重新寫一遍,所有shell指令碼指令更利於修改和嘗試。
3 查詢內容    【簡單查詢】    建立一個名為show.sh的指令碼,具體內容如下#!/bin/shDBNAME="cpu.db"sqlite3 $DBNAME "SELECT * FROM temps;"    【簡單說明】    【1】資料庫名稱為cpu.db。    【2】sqlite3 $DBNAME "select * from temps;" 查詢表中所有記錄。    【3】修改執行許可權 chmod a+x show.sh,然後執行./show.sh    【4】執行結果如下,從結果來看插入的時間間隔一個小時,符合預期效果。RPi.CPU|2014-08-02 17:27:47|40.1RPi.CPU|2014-08-02 18:27:47|40.2RPi.CPU|2014-08-02 19:27:47|40.3RPi.CPU|2014-08-02 20:27:47|40.4
    【修改時間順序】——時間倒序輸出#!/bin/shDBNAME="cpu.db"sqlite3 $DBNAME "select * from temps ORDER BY tdatetime DESC;"    【簡單說明】    【1】ORDER BY tdatetime DESC 以tdatetime降序排列。    【2】輸出結果RPi.CPU|2014-08-02 20:27:47|40.4RPi.CPU|2014-08-02 19:27:47|40.3RPi.CPU|2014-08-02 18:27:47|40.2RPi.CPU|2014-08-02 17:27:47|40.1
    【限制時間】——返回最近3個小時的資料#!/bin/shDBNAME="cpu.db"sqlite3 $DBNAME "SELECT * FROM temps                 where tdatetime > datetime(‘now‘, ‘localtime‘, ‘-3 hours‘)                 ORDER BY tdatetime ASC;"    【簡要說明】        【1】datetime(‘now‘, ‘localtime‘, ‘-3 hours‘)  表示目前時間3個小時之前的時間點,一定要加上localtime參數    【2】where tdatetime > datetime(‘now‘, ‘localtime‘, ‘-3 hours‘)  限制條件3個小時之前到現在。    【3】輸出結果如下,特別說明操作的時間約為22:05。RPi.CPU|2014-08-02 19:27:47|40.3RPi.CPU|2014-08-02 20:27:47|40.4
    【限制時間】——查詢某個時間段內資料#!/bin/shDBNAME="cpu.db"sqlite3 $DBNAME "SELECT * FROM temps                 where tdatetime > datetime(‘2014-08-02 19:00:00‘) and                         tdatetime <= datetime(‘2014-08-02 20:00:00‘);"    【簡要說明】    【1】2014-08-02 19:00:00 年必須佔4個數字,其他必須佔2個數字,不足時使用0不足。    【2】此處不需要增加localtime參數,具體原因未知。
5 總結    【1】建立表格時可使用DEFAULT約束,增加預設值簡化插入操作,避免空值。    【2】INSERT操作含有多種方法,根據實際情況選用。    【3】SQLite datetime函數需要指定localtime參數,指定本地時區。
6 參考資料【1】SQLite Date And Time Functions【2】Set up an SQLite database on a Raspberry Pi【3】SQLite column-constraint【4】SQLite 教程 | w3cschool菜鳥教程
相關文章

聯繫我們

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