跳到主要内容

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

SQLite 到 Prisma schema 之间的类型映射

SQLite 连接器将 标量类型数据模型 映射到原生列类型,如下所示

或者,请参阅 Prisma schema 参考,以获取按 Prisma ORM 类型组织的类型映射。

从 Prisma ORM 到 SQLite 的原生类型映射

Prisma ORMSQLite
StringTEXT
BooleanBOOLEAN
IntINTEGER
BigIntINTEGER
FloatREAL
DecimalDECIMAL
DateTimeNUMERIC
JsonJSONB
BytesBLOB
EnumTEXT
警告

当在 SQLite 中使用 enum 字段时,请注意以下事项

  • 数据库级别不强制执行正确性:如果您绕过 Prisma ORM 并在数据库中存储无效的枚举条目,则 Prisma Client 查询在读取该条目时会在运行时失败。
  • 迁移级别不强制执行正确性:与 MongoDB 类似,在架构更改后可能会最终得到不正确的数据(因为数据库不检查枚举)。

大数字的舍入误差

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