この記事では、Denoからsupabaseにアクセスする方法を解説していきます。
まだ習いたての初心者でにわかですが、
にわかだからこそ初心者向けにはわかりやすい説明ができるのでは?と思っています。
単純に説明が下手、とかがなければね。
- とりあえず動いて、データベースが使えればいいと言う人
- jsでサーバースクリプト作ってる人
分かり易さ優先で厳密な事には一切触れません。
安全性もあったもんじゃありません。
また、前提としてある程度は自分で調べて見たものとして、
少なくとも次の事が押さえてあるとします。
- Denoのserveが使える
- supabaseのアカウントがありプロジェクトがありパスワードを覚えている
この上で、Denoでsupabaseが使えるために追加で必要な事が次のたった2つです!
- SQLiteの構文を理解する
- それをjsに組み込む方法を理解する
既に分かるものは無視しておk
それでは順番に行こう
1. SQLiteの構文
項目1としましたが正直、後回しでもいいです。まずはじめに言います。
インストール関連の必要は全くありません。
SQLiteはあくまでデータベースのための文法(→単なる知識教養)という認識でいいと思います。
MySQLというのもあるようですが、SQLiteとは別物っぽいです。
なので、実際にDenoではSQLiteのソフトは不要なので、そっちは勉強用に使うくらいでいいかと。
データベースを扱う際に大抵欲しいのが取得,追加,更新,削除。この辺りだと思います。
ここでも軽く触れはしますが、それよりもおすすめの記事がございます。m(*_ _)m
ここで触れるのは最低限だけの事です。
基礎知識
- SQLiteのデータベースは表形式です▼
- 表(Table,テーブル)がデータベースの1単位です。
- 行(Row,ロウ)がデータの1単位です。
- 列(Column,カラム)が各データの分割基準です。
- 大文字と小文字の区別はありません。(内部で全て小文字に変換される)
よく使うリクエスト
「...○○」と書いてある部分は「○○,○○,...,○○」のつもりです
テーブルの追加
CREATE TABLE 表名(...列名)
追加
INSERT INTO 表名(...列名) VALUES(...値)
更新
UPDATE 表名 SET ...列名=値
取得
SELECT ...列名 FROM 表名
削除
DELETE FROM 表名
条件の指定
リクエストの末尾にwhere 条件 を追記条件を満たす行だけ操作され、満たさない行はスキップされます。
- 条件式の書き方
各行についてのカラムの値と定数の値が比較対象です。
値 関係 値 のように指定します。
前にnotをつけると否定できて、
()で括ると評価順位を上げれます。
条件 関係 条件 で条件同士の比較もできます。
関係は以下の通りです。
記号 | 関係 |
---|---|
= | 等しい |
== | |
!= | 等しくない |
<> | |
< | 小なり |
<= | 小なりイコール |
> | 大なり |
>= | 大なりイコール |
& | 論理積 |
| | 論理和 |
まじ、上のリンク飛んだ方が絶対理解できます。
ここの解説は理解したあとに確認するのに便利、と思います。
2. jsに組み込む方法
まずはサーバースクリプトを開きます。importは次のものを追加します▶︎
import * as postgres from "https://deno.land/x/postgres@v0.14.0/mod.ts"
次にスクリプトの最初らへんに次のものを追加します▶︎
const pool = new postgres.Pool(接続文字列)
ここで「接続文字列」は次の場所にあります。
Settings(歯車のマーク)>Databaseを選択してください。
その1番下にConection stringというのがあるはずです。これが接続文字列です。
ただ、それをよく見ると[YourPassword]という部分があるので、それを例のパスワードで置き換えたものが実際に有効な接続文字列となります。これをしないと動かないので注意。
またこのとき、角括弧を残して[パスワード]みたいにする方もいるかもですが角括弧も取り除きます。
あと文字列なので、""←ダブルクォートもちろん要ります。
ちなみにこの文字列は普通は環境変数というものに設定して参照するものらしいです。
ここでは割愛します。
ここまでの内容はserveの外側に記述するものですが、これ以降は内側に記述します。
- データベースの接続と解放
supabaseを使う始めの位置に記述します▶︎
const connection = await pool.connect();
一方、使い終わりの位置に記述します▶︎connection.release();
- データベースの操作
SQLite構文を次のように埋め込んで記述します▶︎
const response = await connection.Query`
SQL構文
`;
例えば、testというテーブルのうち、idというカラムが'foo'という値の行の、barというカラムに変数buzという値をセットする場合は次のようにします。const response = await connection.Query`
UPDATE test SET buz=${buz} WHERE id=${'foo'}
`;
あとは始めと終わりの間は自由にデータベース操作ができます。ここで注意事項はあります。
- テーブル名及びカラム名には大文字とハイフン(-)が使えません。アンダーバー(_)は使えることを確認。
大文字はsupabase側で勝手に小文字に変換され、ハイフンはエラーになります。
- 値以外の構文の部分を関数や変数で普通に作ろうとするとエラーになります。逆に値は直接埋め込んでも可です。
その理由はこちらを参考に分かります。
テンプレートリテラル (テンプレート文字列) - JavaScript | MDN
またGETリクエストの場合、返ってくる値はJSON形式となっており、テーブルのデータはrowsに格納されています。要するに、
response.rows
でお目当てのデータを取得できるかと思います。