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
。
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 类型。虽然此表显示 BOOLEAN
,但列被分配了 NUMERIC 亲和性 (存储 0
表示 false,1
表示 true)。了解更多。
当在 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
位于同一目录中
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"
}