数据是每个Web应用程序的关键部分。无论您是构建Sveltekit应用程序以捕获表单输入,可视化某些数据还是为用户提供仪表板,应用程序呼吸数据。
但是处理数据库可能具有挑战性。每个数据库都有自己的API略有不同。您需要编写大量数据库访问代码,并将数据库schemas保持最新。这项工作加起来了。
这就是为什么我喜欢Prisma,使用解决方案是一种友好的友好,可以简化使用数据库的许多痛点。
什么是Prisma?
prisma是一个ORM(对象相关映射器)。它可以帮助应用程序与数据库交谈。有点像您的JavaScript代码和基础数据库之间的中间人。
它可以从数据库中读取行,并将它们变成JavaScript对象(水合)。反之亦然,它可以采用JavaScript对象并更新您的数据库或创建新记录。它支持many types of databases。
代码生成器
在Prisma中,模型(又称表)是在名为schema.prisma
的文件中定义的。然后,您运行prisma generate
为您的应用程序生成自定义客户端。
因此,您可以将Prisma视为一种代码生成器。
模式同步
prisma通过同步更改使数据库模式保持最新。
它支持两种样式:
-
push
:以这种风格,schema.prisma
是真实源。可以轻松处理添加更改,例如添加新表或新列。这是在原型阶段推荐的方法。但这对于更复杂的更改不是理想的选择,例如更改数据类型。 -
migrate
:在这种方法中,迁移脚本被视为真实源。它提供了对模式变化的细粒度控制。建议为生产应用程序使用。
设置
要在Sveltekit应用中安装Prisma,请运行:
pnpm install -D prisma @prisma/client
然后初始化项目:
pnpm prisma init
这做2件事
- 它创建了一个可以定义模型的
prisma/schema.prisma
。 - 它将环境变量
DATABASE_URL
添加到.env
。
DATABASE_URL
是连接信息Prisma需要连接到数据库。
例如,对于Postgres,它看起来像postgresql://USER:PASSWORD@HOST:PORT/DATABASE
有关示例的完整列表,请参见Supported Connection URLs。
起点
对于新应用程序,Prisma模式是从头开始编写的,但Prisma也支持导入现有的旧数据库模式。
要从现有数据库开始
要从新数据库开始,在 这是模型和索引的一些示例。 定义基本模型: 可以以 添加索引: 有关更多示例,请参见docs on modelling或我在Svelte + Prisma上的课程。 要更新数据库架构,运行: 注意:在某些情况下,可能会发生冲突。例如,如果字段的数据类型从 Prisma带有一个方便的数据库查看器,该查看器在浏览器中运行。这是在开发过程中检查数据库表的有用工具。 这是一个屏幕截图: 要查看它,运行: 然后访问 您应用程序中的许多地方可能需要访问数据库。因此,将DB客户端集中是一个好主意。 为此,创建一个称为 现在,任何时候都需要连接,导入 注意:很少需要手动断开连接,因为Prisma在过程结束时会自动关闭连接。 当应用程序使用种子数据集汇票时,设置开发器机器要容易得多。它还使重置环境时更容易。 在Prisma中,种子数据是在 这是一个示例: 然后将 注意:使用 然后加载种子数据: Prisma是将Sveltekit项目与数据库连接的绝佳选择。 Prisma处理所有棘手的内容,例如同步数据库模式并生成SQL查询,因此您不必手动执行此操作。 它可以使开发人员的时间专注于建筑功能。 P.S。有关Sveltekit/Prisma Repo的更多示例,请参见joshnuss/markdown-mail。prisma/schema.prisma
中定义模型和Prisma将为您同步数据库架构。
造型
// in prisma/schema.prisma
model Product {
}
name DataType
的格式添加字段:
model Product {
// auto-incrementing primary key
id Int @id @default(autoincrement())
barcode String
name String
}
model Product {
// ...
// define a unique index
@@unique([barcode])
// define a non-unique index
@@index([name])
}
同步数据库
pnpm prisma db push
String
更改为Int
,则没有自动方法来调和转换。 Prisma会通知您存在冲突,并为您提供重置表(导致数据丢失)的选项,或者您可以使用迁移进行更多控制。
浏览数据库
pnpm prisma studio
https://localhost:5555
访问数据库
src/lib/db.server.js
的文件并实例化客户端:
import { PrismaClient } from '@prisma/client'
// expose a singleton
export const db = new PrismaClient()
lib/db.server.js
:
// import the centralized connection
import { db } from '$lib/db.server'
// then do stuff with the db connection
db.model.create(...)
db.model.update(...)
db.model.findMany(...)
// etc...
播种数据
prisma/seed.js
中定义的。
// in prisma/seed.js
// import db client from previous step
import { db } from '$lib/db.server'
// create one record
await db.product.create({
data: { barcode: '1234', name: 'Shirt' }
})
// or create records in bulk
await db.product.createMany({
data: [
{ barcode: '5678', name: 'Pants' },
{ barcode: '91011', name: 'Socks' }
]
})
prisma
部分添加到package.json
:
"prisma": {
"seed": "vite-node ./prisma/seed.js"
}
vite-node
代替node
,因为我们的seed.js
导入a vite 别名$lib
。因此,请确保也安装vite-node
:
pnpm install -D vite-node
pnpm prisma db seed
结论