SQLite
SQLite データソースコネクタは、Prisma ORM を SQLite データベースファイルに接続します。これらのファイルは常に .db
というファイル拡張子を持ちます (例: dev.db
)。
デフォルトでは、SQLite コネクタはデータベースに接続するためのデータベースドライバを含んでいます。Prisma Client から JavaScript データベースドライバを使用してデータベースに接続するために、ドライバアダプタ (プレビュー) を使用できます。
例
SQLite データベースファイルに接続するには、Prisma スキーマで datasource
ブロックを設定する必要があります
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
datasource
ブロックに渡されるフィールドは以下のとおりです。
provider
:sqlite
データソースコネクタを指定します。url
: SQLite データベースの接続 URL を指定します。接続 URL は常にfile:
のプレフィックスで始まり、SQLite データベースファイルへのファイルパスを含みます。この場合、ファイルは同じディレクトリにあり、dev.db
という名前です。
better-sqlite3
ドライバの使用
v5.4.0
以降、Prisma ORM を JavaScript エコシステムのデータベースドライバ (Prisma ORM の組み込みドライバを使用する代わりに) と共に使用できます。ドライバアダプタを使用することでこれを行うことができます。
SQLite の場合、better-sqlite3
は JavaScript エコシステムで最も人気のあるドライバの 1 つです。
このセクションでは、Prisma ORM と @prisma/adapter-better-sqlite3
ドライバアダプタと組み合わせてそれを使用する方法を説明します。
1. driverAdapters
プレビュー機能フラグを有効にする
ドライバアダプタは現在プレビュー段階であるため、Prisma スキーマの datasource
ブロックでその機能フラグを有効にする必要があります。
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
スキーマに機能フラグを追加したら、Prisma Client を再生成します。
npx prisma generate
2. 依存関係をインストールする
次に、better-sqlite3
用の Prisma ORM のドライバアダプタをインストールします。
npm install @prisma/adapter-better-sqlite3
3. ドライバアダプタを使用して Prisma Client をインスタンス化する
最後に、Prisma Client をインスタンス化する際に、Prisma ORM のドライバアダプタのインスタンスを PrismaClient
コンストラクタに渡す必要があります。
import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3';
import { PrismaClient } from './generated/prisma';
const adapter = new PrismaBetterSQLite3({
url: "file:./prisma/dev.db"
});
const prisma = new PrismaClient({ adapter });
SQLite と Prisma スキーマ間の型マッピング
SQLite コネクタは、データモデルのスカラー型をネイティブカラム型に次のようにマッピングします。
または、Prisma ORM 型で整理された型マッピングについては、Prisma スキーマのリファレンスを参照してください。
Prisma ORM から SQLite へのネイティブ型マッピング
Prisma ORM | SQLite |
---|---|
String | TEXT |
Boolean | BOOLEAN |
Int | INTEGER |
BigInt | INTEGER |
Float | REAL |
Decimal | DECIMAL |
DateTime | NUMERIC |
Json | JSONB |
Bytes | BLOB |
Enum | TEXT |
SQLite には専用の Boolean 型がありません。この表では BOOLEAN
と示されていますが、カラムにはNUMERIC affinity が割り当てられます (false の場合は 0
、true の場合は 1
を格納します)。詳細はこちら。
SQLite で enum
フィールドを使用する場合は、以下に注意してください。
- 正しさのデータベースレベルでの強制なし: Prisma ORM をバイパスしてデータベースに無効な enum エントリを保存した場合、Prisma Client のクエリはそのエントリを読み取る際に実行時エラーになります。
- 移行レベルでの正しさの強制なし: MongoDB と同様に、スキーマ変更後に不正なデータになる可能性があります (enum がデータベースによってチェックされないため)。
大きな数値での丸め誤差
SQLite は緩やかな型付けのデータベースです。スキーマに Int
型のフィールドがある場合、Prisma ORM は整数よりも大きい値を挿入することを防ぎます。ただし、データベースが直接大きな数値を受け入れることを妨げるものはありません。これらの手動で挿入された大きな数値は、クエリ時に丸め誤差を引き起こします。
この問題を回避するため、Prisma ORM 4.0.0 以降では、データベースから数値を出力する際に、それらが整数の境界内に収まることを検証します。数値が収まらない場合、Prisma ORM は例えば次のような P2023 エラーをスローします。
Inconsistent column data: Conversion failed:
Value 9223372036854775807 does not fit in an INT column,
try migrating the 'int' column type to BIGINT
接続の詳細
接続 URL
SQLite コネクタの接続 URL は、ファイルシステム上のファイルを指します。たとえば、.db
が同じディレクトリにあるため、次の2つのパスは同等です。
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
と同じです
datasource db {
provider = "sqlite"
url = "file:dev.db"
}
ファイルシステム上のルートまたは任意の他の場所からファイルをターゲットにすることもできます
datasource db {
provider = "sqlite"
url = "file:/Users/janedoe/dev.db"
}