跳到主要內容

SQLite

SQLite 資料來源聯結器將 Prisma ORM 連線到 SQLite 資料庫檔案。這些檔案總是以 .db 結尾(例如:dev.db)。

預設情況下,SQLite 聯結器包含一個負責連線到您資料庫的資料庫驅動。您可以使用驅動介面卡(預覽版)透過 Prisma Client 使用 JavaScript 資料庫驅動連線到您的資料庫。

示例

要連線到 SQLite 資料庫檔案,您需要在Prisma schema中配置一個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 生態系統中最流行的驅動之一。

本節解釋瞭如何將其與 Prisma ORM 和 @prisma/adapter-better-sqlite3 驅動介面卡一起使用。

1. 啟用 driverAdapters 預覽功能標誌

由於驅動介面卡目前處於預覽階段,您需要在 Prisma schema 的 datasource 塊上啟用其功能標誌。

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}

將功能標誌新增到您的 schema 後,重新生成 Prisma Client

npx prisma generate

2. 安裝依賴項

接下來,安裝 Prisma ORM 用於 better-sqlite3 的驅動介面卡

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 schema 的型別對映

SQLite 聯結器將資料模型中的標量型別對映到原生列型別,如下所示:

或者,請參閱Prisma schema 參考,瞭解按 Prisma ORM 型別組織的型別對映。

Prisma ORM 到 SQLite 的原生型別對映

Prisma ORMSQLite
StringTEXT
BooleanBOOLEAN
IntINTEGER
BigIntINTEGER
FloatREAL
DecimalDECIMAL
DateTimeNUMERIC
JsonJSONB
BytesBLOB
EnumTEXT
注意

SQLite 沒有專用的布林型別。雖然此表顯示 BOOLEAN,但列被分配了 NUMERIC affinity(儲存 0 代表 false,1 代表 true)。瞭解更多

警告

在 SQLite 中使用 enum 欄位時,請注意以下幾點:

  • 無資料庫級別正確性強制執行:如果您繞過 Prisma ORM 並在資料庫中儲存了無效的列舉條目,Prisma Client 查詢在讀取該條目時將在執行時失敗。
  • 無遷移級別正確性強制執行:與 MongoDB 類似,在 schema 更改後可能會出現不正確的資料(因為列舉不受資料庫檢查)。

大數舍入錯誤

SQLite 是一個弱型別資料庫。如果您的 Schema 中有一個 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 檔案位於同一目錄中:

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"
}
© . This site is unofficial and not affiliated with Prisma Data, Inc.