用了3个月的prisma,作为和TypeOrm可以说占据了大部分的node后端orm份额,但实际我个人用起来,虽然在参数类型上比较方便,但其他还有值得改进的点,但官方给人的感觉就很傲慢,就这个态度,在我看来目前还称不上下一代ORM
。
因为本人主要做前端开发,写后端只是顺带,所以一定会有不了解的地方。以下为个人使用过程中遇到的,仅作记录。
- 2024.4.21 更新:
5.12.0
发布,终于,sqlite支持了createMany
方法。
不错的点
提供操作的类型可以直接使用
比如,我想插入一条user数据,我可以直接使用Prisma.UserCreateInput
,而不需要自己定义一个interface
,这点我觉得非常不错。
1 | async create(data: Prisma.UserCreateInput): Promise<User> { |
除了Prisma.UserCreateInput
,还有Prisma.UserUpdateInput
,Prisma.UserWhereUniqueInput
等等,这些都是prisma自动生成的,非常方便。但是仍然有不完美的地方就是,自动生成的类型无法在swagger中直接使用,
1 | type: () => Prisma.UserUpdateInput }) ({ |
需要自己去implements一下。
1 | export class CreateUserDto implements Prisma.UserCreateInput {} |
社区认为值得改进但官方并不重视
核心功能缺失
prisma 5.12.0 版本,sqlite已经支持createMany
方法。猜测一下,多半是因为其竞品drizzle
以及cloudflare D1
正式发布的原因
我开始的时候使用SQLite
进行开发,但是在使用过程中发现prisma
的Sqlite
支持非常不完善,甚至可以说是部分功能完全不可用,比如说:
createMany
,作为ORM,我个人认为这是最核心这个功能,然而在Sqlite中是不支持的,很久的issue了。
prisma团队以性能问题,一直没有解决,这个功能在我看来是非常基础的功能。开发者也明确说明了不需要在乎性能,就是想做开发测试,但是prisma却仍然没有支持,这让我非常不解,最后不得不换到了postgres上。
提出的优秀feat官方并不进行支持
- 不支持拆分配置文件。
prisma
的数据模型设计文件并非.ts
,而是自定义的*.prisma
。以我正在开发中的项目为例子,目前只设计了62张表,schema.prisma
(prisma
默认存放表结构的文件)已经800+行。 - 不提供
@default(nanoid())
,只支持@default(uuid())
。
Bug年久失修
- schema.prisma中定义,
1 | model Answer { |
然后在代码中使用
1 | create(questionId: string, input: AnswerInput) { |
以上,看起来没错,但是, Type ‘string’ is not assignable to type ‘never’ #15946 - @DiogoMarques2003 opened this issue on Oct 24, 2022
最后
希望prisma能够越来越好,但是目前来看,我个人认为prisma还不够成熟,还有很多需要完善的feat。