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

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 という名前です。

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クエリは、そのエントリを読み取るときにランタイムで失敗します。
  • 正確性に関するマイグレーションレベルの強制はありません: (enumはデータベースによってチェックされないため)MongoDBと同様に、スキーマ変更後に不正なデータが発生する可能性があります。

大きな数値での丸め誤差

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は、ファイルシステム上のファイルを指します。たとえば、次の2つのパスは .db が同じディレクトリにあるため同等です。

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"
}