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
:指定连接 URL 的 SQLite 数据库。连接 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 在数据库中存储了无效的 enum 条目,则 Prisma Client 在读取该条目时会在运行时失败。
- 迁移层面不强制执行正确性:与 MongoDB 类似(因为 enums 未被数据库检查),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"
}