数据库
最后更新于
绝大多数应用都离不开数据库,本章将介绍如何使用飞布连接数据库,并从中构建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调用查询引擎的原理图。
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
命令。
了解更多,前往 Prisma 文档 查看。
Prisma迁移引擎是一个二进制命令行,用于设计或迁移数据库,本质上是将prisma schema转换成建表或更新表语句。
迁移分为两种情况:
对应prisma db push
命令,适用于开发阶段,可能造成数据丢失。
在飞布数据建模功能模块中的”迁移“操作,底层调用的是该命令,因此不建议生产环境中使用。
对应 prisma migrate dev
,适用于生产阶段。其原理如下图:
对该命令的集成,暂未实现,可先用Prisma官方的命令进行支持。
理论上飞布支持prisma兼容的所有数据库,所支持的数据源的完整列表可以在这里查看,当前正在按照优先级持续兼容中。
如果你想了解支持进度,可联系我们。