跳到主要内容

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:指定连接 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 块上启用其功能标志

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 在数据库中存储了无效的 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 文件位于同一目录中

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