メインコンテンツにスキップ

SQLite

SQLite データソースコネクタは、Prisma ORM を SQLite データベースファイルに接続します。これらのファイルは常に .db というファイル拡張子を持ちます (例: dev.db)。

デフォルトでは、SQLite コネクタはデータベースに接続するためのデータベースドライバを含んでいます。Prisma Client から JavaScript データベースドライバを使用してデータベースに接続するために、ドライバアダプタ (プレビュー) を使用できます。

SQLite データベースファイルに接続するには、Prisma スキーマdatasource ブロックを設定する必要があります

schema.prisma
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 ブロックでその機能フラグを有効にする必要があります。

schema.prisma
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 ORMSQLite
StringTEXT
BooleanBOOLEAN
IntINTEGER
BigIntINTEGER
FloatREAL
DecimalDECIMAL
DateTimeNUMERIC
JsonJSONB
BytesBLOB
EnumTEXT

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つのパスは同等です。

schema.prisma
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}

と同じです

schema.prisma
datasource db {
provider = "sqlite"
url = "file:dev.db"
}

ファイルシステム上のルートまたは任意の他の場所からファイルをターゲットにすることもできます

schema.prisma
datasource db {
provider = "sqlite"
url = "file:/Users/janedoe/dev.db"
}
© . All rights reserved.