Closed2

Turso CLI でlibSQL 操作、SDKでSQL実行するまで。

knaka Tech-Blogknaka Tech-Blog

概要

Tursoで、libSQL 使うメモになります。

  • Astro DBで、使用されてみるみたいです。
  • Astro使わなくでも、DB使えそうなので調べました。
  • Tursoアカウント、必要です (GitHub アカウントでログインできました)
  • signup完了まで、進めておく。

[ 公開: 2024/03/16 ]


環境

  • Turso
  • node 20
  • windows 11 WSL, Ubuntu

関連


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
  }
]
knaka Tech-Blogknaka Tech-Blog

まとめ、感想

  • デメリット
  • cold sleep的な遅延あり。起きるのに5~8秒遅れる(連続使用する場合、遅延しない)
  • d1より遅い感じ。

  • メリット
  • ローカルに、DB作成不要。最初からサーバー側に接続できる。
  • 登録DB数が多い(500? d1は無料枠の上限少ない)
  • API作成不要で、libSQL(sqlite?) に接続できる
このスクラップは19日前にクローズされました