数据库
绝大多数应用都离不开数据库,本章将介绍如何使用飞布连接数据库,并从中构建API。
飞布使用Prisma ORM连接数据库,支持SQLite, MySQL, PostgreSQL, SQL Server或MongoDB。
飞布提供了友好的界面,无需借助三方工具,就能完成数据建模。你也可以连接现有数据库开发API。飞布CLI还可以生成迁移文件,你可以直接编辑并进行数据库版本控制。
原理浅析
飞布底层封装了prisma引擎,利用prisma的内省能力[内省引擎],将数据库中的表结构内省成Prisma Model以及GraphQL Schema,并利用prisma的查询能力[查询引擎]执行GraphQL Opeartion操作数据。此外,飞布还利用prisma的迁移能力[迁移引擎],实现了数据建模功能。
Prisma ORM一般指的是基于Ts对Prisma Engine的封装,而飞布只使用了Prisma Engine,未使用Ts Prisma。
了解更多,请前往"工作原理"。
查询引擎
Prisma查询引擎是一个常驻WEB SERVER,用于执行GraphQL Operation(通过HTTP协议或NODE API)。本质上是将GraphQL Operation转换成SQL语句,发送至数据库执行,并将查询结果拼装成JSON响应返回。下图是Prisma Client调用查询引擎的原理图。
![](https://docs.fireboom.io/~gitbook/image?url=https%3A%2F%2F2707494476-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNx22Cp3wzkuW1siRbMwW%252Fuploads%252Fgit-blob-5d760d9494f8fec99765829d5e6535ca55aced1e%252Fimage%2520%282%29%2520%284%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=12b4f15c&sv=1)
Prisma Client用TS函数封装了GraphQL Operation。下图的findMany
,在飞布中对应如下GraphQL Operation。
飞布GraphQL Operation和Prisma Client函数签名的对应规则为:
GraphQL Operation=[命名空间]+函数签名+[表名]
Prisma 查询引擎支持函数如下:
查询方法:
findFirst:返回列表中符合条件的第一条记录。
findMany:返回记录列表。
findUnique:根据主键或唯一键查询一条记录。
aggregate:聚合数据,包括avg、count、sum、min、max。
groupBy:结合聚合函数,根据一个或多个列对结果集进行分组。
变更方法:
createOne:创建一条记录,对应sql中的insert。
deleteMany:批量删除记录,对应sql中的delete。
deleteOne:删除一条记录,对应sql中的delete。
updateMany:更新多条记录,对应sql的update。
updateOne:更新一条记录,对应sql的update。
upsertOne:更新或插入一条记录。
了解更多, 前往 Prisma文档 查看。
内省引擎
Prisma内省引擎是一个二进制命令行,用于内省数据库,获得数据库schema,并映射成prisma schema。
对应prisma db pull
命令。
![](https://docs.fireboom.io/~gitbook/image?url=https%3A%2F%2F2707494476-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNx22Cp3wzkuW1siRbMwW%252Fuploads%252Fgit-blob-1d5823d997102e4c182022663082ee2054ae7010%252Fimage%2520%286%29%2520%284%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5d704388&sv=1)
了解更多,前往 Prisma 文档 查看。
迁移引擎
Prisma迁移引擎是一个二进制命令行,用于设计或迁移数据库,本质上是将prisma schema转换成建表或更新表语句。
迁移分为两种情况:
原型设计
对应prisma db push
命令,适用于开发阶段,可能造成数据丢失。
在飞布数据建模功能模块中的”迁移“操作,底层调用的是该命令,因此不建议生产环境中使用。
数据库迁移
对应 prisma migrate dev
,适用于生产阶段。其原理如下图:
![](https://docs.fireboom.io/~gitbook/image?url=https%3A%2F%2F2707494476-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FNx22Cp3wzkuW1siRbMwW%252Fuploads%252Fgit-blob-4de7c94ed72a854c3895e7613d822781da034aca%252Fimage%2520%2840%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=90312a42&sv=1)
对该命令的集成,暂未实现,可先用Prisma官方的命令进行支持。
支持数据库
理论上飞布支持prisma兼容的所有数据库,所支持的数据源的完整列表可以在这里查看,当前正在按照优先级持续兼容中。
如果你想了解支持进度,可联系我们。
最后更新于