Prisma Prisma是一个更现代化的数据库工具套件,用于简化和改进应用程序与数据库之间的交互
Prisma提供了一个类型安全(使用TypeScript)的查询构建器和一个强大的 ORM(对象关系映射)层,能以声明性的方式操作数据库
Prisma支持多种主流数据库,包括PostgreSQL、MySQL和SQLite,通过生成标准的数据库模型来与这些数据库进行交互
Prisma可以定义数据库模型并生成类型安全的查询构建器,这些构建器提供了一套直观的方法来增删改查数据库
Prisma还提供了数据库迁移工具,能自动创建、应用迁移脚本,方便变更数据库模式
Prisma使用了先进的查询引擎和数据加载技术从而提高数据库访问性能,也支持高级查询功能(例如关联查询和聚合查询),还会自动优化查询以提供最佳的性能
安装 1 2 $ pnpm install -g prisma $ prisma init --datasource-provider mysql
项目结构:
使用 连接数据库 修改.env文件的DATABASE_URL配置
1 DATABASE_URL="mysql://账号:密码@主机:端口/数据库名"
创建表 在prisma/schema.prisma中写入内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 model Post { id Int @id @default(autoincrement()) // id 自增整数 title String // 标题 字符串 publish Boolean @default(false) // 是否已发布 布尔 默认false author User @relation(fields: [authorId], references: [id]) // 作者 关联用户表 关联关系为authorId-user.id authorId Int // 作者id 整数 } model User { id Int @id @default(autoincrement()) // id 自增整数 name String // 名字 字符串 email String @unique // 电子邮件 字符串 唯一值 posts Post[] // 发布的文章 和Post形成一对多关系 }
随后执行命令,需要输入一个操作名
表就被创建好了
增删改查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 import express from 'express' import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient ()const app = express ()app.use (express.json ()) 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 ('/create' , async (req, res) => { const { name, email } = req.body const data = await prisma.user .create ({ data : { name, email, posts : { create : { title : '标题' , publish : true }, } } }) res.send (data) }) app.post ('/update' , async (req, res) => { const { id, name, email } = req.body const data = await prisma.user .update ({ where : { id : Number (id) }, data : { name, email } }) res.send (data) }) app.post ('/delete' , async (req, res) => { const { id } = req.body await prisma.post .deleteMany ({ where : { authorId : Number (id) } }) const data = await prisma.user .delete ({ where : { id : Number (id), }, }) res.send (data) }) app.listen (11451 , () => { console .log (`Server on 11451` ) })