Closed2
Turso CLI でlibSQL 操作、SDKでSQL実行するまで。
概要
Tursoで、libSQL 使うメモになります。
- Astro DBで、使用されてみるみたいです。
- Astro使わなくでも、DB使えそうなので調べました。
- Tursoアカウント、必要です (GitHub アカウントでログインできました)
- signup完了まで、進めておく。
[ 公開: 2024/03/16 ]
環境
- Turso
- node 20
- windows 11 WSL, Ubuntu
関連
-
Quickstart
-
Turso CLI/ Introduction
-
Turso Quickstart (TypeScript / JS)
CLI install
- Turso/Database画面で、db作成まで完了しておく (ここまで簡単です)
curl -sSfL https://get.tur.so/install.sh | bash
※実行できない場合、sudoで実行してみる
- version
turso --version
turso version v0.90.0
- signup完了の場合、ログインに進む
turso auth login --headless
- Visit the following URL to login: の下URLを、ブラウザに貼り付ける
turso auth login --headless
Visit the following URL to login:
https://xxx
-
ACCESS TOKEN画面に、token表示されるので「コピー」ボタンおす
-
※export TURSO_API_TOKENで、はじまる文字
-
コンソールに、はりつける
-
確認方法は、echo $TURSO_API_TOKEN を実行すると。tokenが設定される
$ echo $TURSO_API_TOKEN
e......
- show-db: 作成したdbが表示される
turso db show my-db
- shell
turso db shell my-db
- shell実行後、SQL実行できます。
- table作成や,検索できます。
$ turso db shell db1
Connected to ..
→ SELECT * FROM test;
ID CREATEDAT UPDATEDAT TITLE CONTENT COMPLETED USERID
1 2024-03-17 04:42:18 NULL t1 c1 0 0
2 2024-03-17 04:42:57 NULL t2 content2 0 0
3 2024-03-17 04:42:57 NULL t3 content3 0 0
- てきとうに、表作成、レコード追加
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
createdAt TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP(3) NULL,
title TEXT NOT NULL,
content TEXT,
completed INTEGER DEFAULT 0,
userId INTEGER DEFAULT 0
);
###
INSERT INTO test(title, content)VALUES('t1', 'content1');
INSERT INTO test(title, content)VALUES('t2', 'content2');
INSERT INTO test(title, content)VALUES('t3', 'content3');
###
SELECT * FROM test;
SDK install
mkdir turso1
cd turso1
npm init -y
npm install @libsql/client
- package.json, esmに変えます
{
"type": "module",
"name": "turso1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@libsql/client": "^0.5.6"
}
}
- SELECTは、作成したテーブル指定します。
- authToken: Database画面、db選択、Generate Tokenおす。
- url: Database画面、db選択、URLの下の、先頭がlibsql:// の文字
test1.js
import { createClient } from "@libsql/client";
const authToken = "";
//
const client = createClient({
url: "libsql://...",
authToken: "...",
});
//
const testFunc = async function(){
const resulte = await client.execute("SELECT * FROM test");
console.log(resulte.rows);
}
//
console.log("#start");
testFunc();
- 実行結果
#start
[
{
id: 1,
createdAt: '2024-03-17 04:42:18',
updatedAt: null,
title: 't1',
content: 'c1',
completed: 0,
userId: 0
},
{
id: 2,
createdAt: '2024-03-17 04:42:57',
updatedAt: null,
title: 't2',
content: 'content2',
completed: 0,
userId: 0
},
{
id: 3,
createdAt: '2024-03-17 04:42:57',
updatedAt: null,
title: 't3',
content: 'content3',
completed: 0,
userId: 0
}
]
まとめ、感想
- デメリット
- cold sleep的な遅延あり。起きるのに5~8秒遅れる(連続使用する場合、遅延しない)
- d1より遅い感じ。
- メリット
- ローカルに、DB作成不要。最初からサーバー側に接続できる。
- 登録DB数が多い(500? d1は無料枠の上限少ない)
- API作成不要で、libSQL(sqlite?) に接続できる
このスクラップは2024/04/14にクローズされました