SQLite
SQLite 資料來源聯結器將 Prisma ORM 連線到 SQLite 資料庫檔案。這些檔案總是以 .db 結尾(例如:dev.db)。
預設情況下,SQLite 聯結器包含一個負責連線到您資料庫的資料庫驅動。您可以使用驅動介面卡(預覽版)透過 Prisma Client 使用 JavaScript 資料庫驅動連線到您的資料庫。
示例
要連線到 SQLite 資料庫檔案,您需要在Prisma schema中配置一個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 生態系統中最流行的驅動之一。
本節解釋瞭如何將其與 Prisma ORM 和 @prisma/adapter-better-sqlite3 驅動介面卡一起使用。
1. 啟用 driverAdapters 預覽功能標誌
由於驅動介面卡目前處於預覽階段,您需要在 Prisma schema 的 datasource 塊上啟用其功能標誌。
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 ORM | SQLite |
|---|---|
String | TEXT |
Boolean | BOOLEAN |
Int | INTEGER |
BigInt | INTEGER |
Float | REAL |
Decimal | DECIMAL |
DateTime | NUMERIC |
Json | JSONB |
Bytes | BLOB |
Enum | TEXT |
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 檔案位於同一目錄中:
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"
}