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