跳到主要内容

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"
}
© . All rights reserved.