Prisma 是一个现代的 ORM(对象关系映射) 工具,用于简化与数据库的交互。它可以帮助开发者通过代码操作数据库,而不必直接编写 SQL 查询。Prisma 支持多种数据库系统,包括 PostgreSQL、MySQL、SQLite 和 SQL Server,并且提供了对 TypeScript 和 JavaScript 的完整支持。
Prisma 的主要特点:
类型安全:提供强大的类型推导,特别是在 TypeScript 中,开发者可以获得类型安全。这意味着你可以在编写代码时就能获得数据库查询的类型检查,从而避免运行时错误。
Prisma Client:Prisma Client 是一个自动生成的查询构建器,它帮助你通过 JavaScript 或 TypeScript 操作数据库。你可以使用它执行查询、插入、更新和删除操作,而不需要直接编写 SQL 查询。
自动化:根据你定义的 schema 自动生成数据库模型和迁移文件,减少了手动编写数据库代码的工作量。
广泛的数据库支持:支持多种数据库,包括关系型数据库(如 PostgreSQL、MySQL、SQLite 和 SQL Server),并且在支持 MongoDB(实验性功能)方面也在不断发展。
安装使用
1.安装 Prisma CLI:
npm install -g prisma
2.初始化项目
prisma init --datasource-provider mysql
会创建生成基本目录
3.链接mysql
修改.env 文件 [DATABASE_URL="mysql://账号:密码@主机:端口/库名"]
DATABASE_URL="mysql://root:123456@localhost:3306/zxd"
创建表
/prisma/schema.prisma
//文章表 model Post {id Int @id @default(autoincrement())title Stringcontent Stringauthor User @relation(fields: [authorId], references: [id]) // 一对多关系 authorId Int }// 用户表 一个用户可以有多篇文章 model User {id Int @id @default(autoincrement())name Stringemail String @uniqueposts Post[]// 一对多关系 }
这个User 中的posts 名称随意取 ,目的是与Post表关联
执行命令 创建表
prisma migrate dev
实现增删改查
保证全局安装typescript
npm install typescript ts-node -g
/src/app.ts
import express from "express";import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); const app = express(); const port = 3000; app.use(express.json());app.post("/create", async (req, res) => {const { name, email } = req.body;const data = await prisma.user.create({data: {name,email,posts: {create: [{title: "hello",content: "hello world",},{title: "文章2",content: "文章2内容",},],},},});res.send(data); });app.get("/", async (req, res) => {const data = await prisma.user.findMany({include: {posts: true,},});res.send(data); });app.get("/user/:id", async (req, res) => {const row = await prisma.user.findMany({where: {id: Number(req.params.id),},});res.send(row); });app.post("/update", async (req, res) => {const { name, email, id } = req.body;const data = await prisma.user.update({data: {name,email,},where: {id: Number(id),},});res.send(data); });app.post("/delete", async (req, res) => {await prisma.post.deleteMany({where: {authorId: Number(req.body.id),},});const data = await prisma.user.delete({where: {id: Number(req.body.id),},});res.send(data); });app.listen(port, () => {console.log(`Example app listening on port ${port}`); });