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
という名前です。
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クエリは、そのエントリを読み取るときにランタイムで失敗します。
- 正確性に関するマイグレーションレベルの強制はありません: (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
が同じディレクトリにあるため同等です。
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"
}