一个比写SQL更爽的数据库工具,我用了一周就回不去了

我写后端代码的时候,最烦的事不是业务逻辑有多复杂,而是跟数据库打交道的那堆破事。

写原生SQL吧,字符串拼接容易出错,字段名改了还得去一堆文件里找。用TypeORM或者Sequelize吧,类型提示稀烂,查出来一堆any,心里没底。更别提迁移文件那堆手写的up/down,改个表结构跟拆炸弹似的。

后来团队有人推荐Prisma,说这玩意"真香"。我一开始是抗拒的,毕竟ORM这东西我用过好几个,没一个省心的。但用了大概一周之后,我就把之前那些全扔了。

Prisma是什么

简单说,Prisma是一套数据库工具链,包含三个东西:

Prisma Client:自动生成的类型安全查询构造器。你定义好数据模型,它给你生成完整的TypeScript类型,查询结果自带提示,字段名写错了编译都过不去。

Prisma Migrate:声明式的数据库迁移系统。改模型文件,跑一条命令,迁移文件和SQL自动生成,不需要手写。

Prisma Studio:一个可视化的数据库管理界面,类似phpMyAdmin但好用一百倍。

这仨东西加一起,覆盖了从建模到查询到数据管理的全流程。

核心就一个文件

你用Prisma的时候,所有事情都围绕一个文件转:schema.prisma。

这个文件里定义三块东西:数据源(连什么数据库)、生成器(生成什么语言的客户端)、数据模型(你的表结构长什么样)。

model User {
  id    Int    @id @default(autoincrement())
  email String @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int    @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?  @relation(fields: [authorId], references: [id])
  authorId  Int?
}

就这么几行,Prisma就能给你生成完整的CRUD操作,包括关联查询、过滤、排序、分页,全都带着类型提示。

类型安全是真的香

我见过太多ORM把TypeScript支持做成半吊子,查出来的数据你用的时候全靠猜。

Prisma不一样。查询结果天然是类型化的,编辑器里点一下就知道有什么字段,嵌套关联也能补全。重构的时候改模型定义,所有引用地方都能被类型系统揪出来,不用自己满项目找。

这才是TypeScript该有的用法。

查数据不用写SQL

Prisma Client的查询接口设计得挺自然的:

查所有用户:

const allUsers = await prisma.user.findMany()

带上关联的帖子:

const allUsers = await prisma.user.findMany({
  include: { posts: true }
})

查标题或者内容包含"prisma"的文章:

const filteredPosts = await prisma.post.findMany({
  where: {
    OR: [
      { title: { contains: 'prisma' } },
      { content: { contains: 'prisma' } }
    ]
  }
})

一次创建用户和关联文章:

const user = await prisma.user.create({
  data: {
    name: 'Alice',
    email: 'alice@prisma.io',
    posts: {
      create: { title: 'Join us for Prisma Day 2021' }
    }
  }
})

更新一条记录:

const post = await prisma.post.update({
  where: { id: 42 },
  data: { published: true }
})

这些操作返回的都是普通的JavaScript对象,没有ORM那种包装层,用起来很直接。

怎么上手

想快速体验的话,5分钟就够了。

先安装:

npm install prisma --save-dev
npm install @prisma/client

配置数据库连接,在项目根目录建一个prisma.config.ts:

import { defineConfig, env } from 'prisma/config'

export default defineConfig({
  datasource: {
    url: env('DATABASE_URL'),
  }
})

然后定义模型,跑生成命令:

npx prisma generate

代码里导入就能用了。模型改了再跑一次生成,客户端自动更新。

如果想本地起一个PostgreSQL开发环境,连Docker都不用:

npx prisma dev

一条命令搞定。

谁在用这玩意

Prisma在Node.js生态里已经算得上标配了,尤其是TypeScript项目。不管你是写REST API、GraphQL还是微服务,只要是Node后端连数据库,这玩意都能用得上。

数据库支持PostgreSQL、MySQL、SQLite、SQL Server、MongoDB和CockroachDB,覆盖面基本够了。

社区也挺活跃,有问题GitHub上提issue响应很快,Discord里也有一堆人帮忙看。

说点实在的

Prisma不是没有槽点。比如冷启动的时候加载客户端会有点慢,serverless环境要额外处理。再比如复杂查询有时候生成的SQL不是最优的,得自己调。

但总的来说,在"写起来爽"和"跑起来快"之间,它平衡得不错。至少在我经手的项目里,换用Prisma之后,跟数据库打交道的时间减少了三分之一以上,bug也跟着少了一堆。

如果你现在还在手写SQL或者用那些类型支持稀烂的ORM,真心建议花5分钟试一下。这玩意用了确实回不去。


项目地址:github.com/prisma/prisma

如果觉得有用,欢迎点个⭐️,也欢迎来Discord一起交流。

展开阅读全文

更新时间:2026-07-13

标签:科技   数据库   工具   类型   文件   玩意   项目   模型   定义   东西   客户端   命令

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号

Top