日常
注意下他的日期要用 datetime('now','localtime')
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| create table temperature_data ( id integer primary key, thetime datetime, temperature REAL );
insert into temperature_data(thetime , temperature) values(datetime('now','localtime') , 22.5);
select * from temperature_data;
select datetime('now','localtime'); select datetime('now');
--轉為 localtime select datetime(thetime, 'localtime') from temperature_data;
--查資料表有無建立 select * from sqlite_master;
|
資料型別
資料型別
NULL. The value is a NULL value.
INTEGER. The value is a signed integer, stored in 0, 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.
TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE).
BLOB. The value is a blob of data, stored exactly as it was input.
sqlite-web
因為是檔案式可以考慮安裝 sqlite-web 來操作遠端
測試檔案
這套好像是 flask
做的 , 要跑在背景可能參考這篇
1 2
| sudo apt install python3-pip pip3 install sqlite-web
|
我測 windows 也沒問題 , 密碼預設是抓環境變數 SQLITE_WEB_PASSWORD
看要訂怎樣 global 或是該 user
1 2 3 4 5 6 7
| #for user #vim ~/.bashrc
#for global vim /etc/environment
export SQLITE_WEB_PASSWORD=TEST
|
要對外的話要這樣下
for windows
1
| sqlite_web --host 0.0.0.0 --password --no-browser 'C:\testdb\test.db'
|
for linux
1
| sqlite_web --host 0.0.0.0 --password --no-browser test.db
|
跑背景 , 最簡單就是搞個 &
符號在結尾
1
| sqlite_web --host 0.0.0.0 --password --no-browser test.db &
|
列出 process
1 2 3 4 5 6
| ps
# PID TTY TIME CMD # 902146 pts/0 00:00:12 zsh # 910883 pts/0 00:00:00 sqlite_web # 910962 pts/0 00:00:00 ps
|
砍掉 , 可以參考這篇 或 這篇
久沒用 linux 又忘了
sqlitebrowser
猜應該是 qt 寫的 , 一臉 qt 臉
這個 sqlitebrowser 在 windows 才用吧
最大重點應該就是記得要關閉資料庫連線
看是要用官方的 cli
或是這套偷懶的 litecli
我自己是用偷懶的 , 我測 windows 也是能用
安裝
建 db
1 2 3
| mkdir sqlite-test cd ~/sqlite-test litecli 'test.db'
|
整合 nodejs sequelize
這裡要注意 , 現在 v7
在 alpha
看文件別翻錯
https://sequelize.org/docs/v6/
1
| npm install sequelize sqlite3
|
自己搞了陣子 , 發現 sqlite 的日期只會用 utc
, 然後這個 ORM
的新增的時間又有點雷包雷包
會長大概這樣 2023-01-06 09:46:06.292 +00:00
後面有帶 +00:00
暫時無解 , 不過最後時間是一樣低
example code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| import { Sequelize, DataTypes, Model, QueryTypes } from 'sequelize';
const sequelize = new Sequelize({ dialect: 'sqlite', storage: 'test.db' }); class TemperatureData extends Model { }
TemperatureData.init({ id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, allowNull: false }, thetime: { type: DataTypes.DATE, allowNull: false, // 寫這樣他反而會用他 ORM 內建的變數 , 不是 DB 的預設數值 // defaultValue: Sequelize.NOW defaultValue: Sequelize.literal('CURRENT_TIMESTAMP') },
temperature: { //sqlite REAL type: DataTypes.FLOAT, } }, { sequelize,
//自動複數化 freezeTableName: true,
//自訂表名 tableName: 'temperature_data',
//不要他系統自己加的欄位 createdAt: false, updatedAt: false });
(async () => { // create table example // force: true 會刪表 await sequelize.sync({ force: true }); // console.log('同步模型');
// insert example // 他這裡新增的會會長這樣 2023-01-06 09:09:36.761 +00:00 // let now = getDateString(new Date()); // console.log('now' , now) const insertRow = await TemperatureData.create({ temperature: 26.03 }); // const insertRow2 = await TemperatureData.create({ temperature: 27.03 }); // const insertRow3 = await TemperatureData.create({ temperature: 28.03, thetime: (new Date()).toISOString() }); // const insertRow4 = await TemperatureData.create({ temperature: 28.03, thetime: new Date() }); console.log(insertRow.toJSON()) // console.log(insertRow2.toJSON()) // console.log(insertRow3.toJSON()) // console.log(insertRow4.toJSON())
//要這樣看 , 不要直接 log 印 // console.log(row.toJSON());
//query example 1 // const rows1 = await TemperatureData.findAll(); // console.log(rows1)
//query example 2 // const rows2 = await sequelize.query('select * from temperature_data', { type: QueryTypes.SELECT }); //這裡他會是給 UTC //要轉 localtime 要用以下方法 //new Date(Date.parse('2023-01-06 09:09:36.761 +00:00')) // console.log(rows2); })();
|