prisma

news/2025/3/31 3:17:00/文章来源:https://www.cnblogs.com/zhuangdd/p/18796410

 

 

Prisma 是一个现代的 ORM(对象关系映射) 工具,用于简化与数据库的交互。它可以帮助开发者通过代码操作数据库,而不必直接编写 SQL 查询。Prisma 支持多种数据库系统,包括 PostgreSQLMySQLSQLiteSQL Server,并且提供了对 TypeScript 和 JavaScript 的完整支持。

 

Prisma 的主要特点:

类型安全:提供强大的类型推导,特别是在 TypeScript 中,开发者可以获得类型安全。这意味着你可以在编写代码时就能获得数据库查询的类型检查,从而避免运行时错误。

Prisma Client:Prisma Client 是一个自动生成的查询构建器,它帮助你通过 JavaScript 或 TypeScript 操作数据库。你可以使用它执行查询、插入、更新和删除操作,而不需要直接编写 SQL 查询。

 Prisma Migrate:数据库迁移工具,用于自动生成和应用数据库结构的变化。当你的数据库模式(schema)发生变化时,可以轻松生成和应用迁移脚本。
Prisma Studio:用户界面(UI)工具,允许你可视化并操作数据库中的数据。它提供了一个直观的方式来查看和编辑数据,非常适合开发和调试阶段使用。

自动化:根据你定义的 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}`);
});

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hugo 渲染及主页展示白名单

本人通过 Obsidian + Hugo + Github Page + Github Action 来实现文章管理及博客自动化搭建. Hugo 渲染白名单 因为不想将 Obsidian 仓库中的一些隐私笔记发布到博客上, 于是选择使用 module.mounts 来配置允许 Hugo 渲染的文件夹. module:mounts:- source: "content/post…

统计中的三大检验

t 检验 常用于:正态总体方差未知,单样本均值检验;(方差已知用 z-test, 非正态总体小样本用切比雪夫不等式); 两独立正态总体,方差未知但相等,均值差检验;(方差已知用 z-test;方差未知且不等时使用 Welchs t 检验,大样本下正态近似也能用 z-test); 两独立正态总体,…

信创行业面临的挑战与应对策略

信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,构建安全可靠的信息技术体系。近年来,随着全球政治经济形势的变化以及数字化转型的加速,信创行业迎来了前所未有的发展机遇,同时也面临着诸多严峻的挑战。深入剖析这些挑战并探寻有效的应对策略,对于信创行…

PLM项目管理软件如何支持企业的产品合规管理?

产品合规管理在企业运营中至关重要,关乎企业的声誉、市场竞争力以及可持续发展。随着市场环境的日益复杂和法规要求的不断严格,企业面临着越来越多的产品合规挑战。PLM(产品生命周期管理)项目管理软件作为一种强大的工具,能够为企业的产品合规管理提供全方位的支持,助力企…

P1282 多米诺骨牌

链接 https://www.luogu.com.cn/problem/P1282 思路本来的思路是dp[i][j][0/1]表示前i个选j个翻面其中第i个是(1)否(0)翻面。然后递推取min。但是这样很显然会导致类似贪心的问题:只符合前面的局部利益,不符合后续最佳组合。 正确做法: 用dp[i][j]来表示当前考虑到第i个…

矿井人员误入预警防爆系统

燧机科技AI智能矿井人员误入报警防爆系统嵌入AI智能人体识别深度算法,人员误入监测是在带式输送机的重要位置或沿线,安装人体智能分析和越界监测功能的防爆AI智能分析预警摄像机,实时监测识别人员与带式输送机的距离,当摄像机识别到人员与带式输送机的距离发生变化时且进入…

PLM在电子与半导体行业的应用价值

产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这…

htb cicada靶场

htb Cicada靶场笔记 目标:Cicada,IP地址:10.10.11.35 1.信息收集nmap扫描目标端口,打印端口详细信息nmap -sVC 10.10.11.35 nmap -sVC 10.10.11.35 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-26 22:30 EDT Stats: 0:00:50 elapsed; 0 hosts completed (1 up)…

KPI/KSF/360评估/FDM/ARM/BARS六大工具全解析:企业绩效管理方法论与实施

你是否因绩效考核方法难抉择而苦恼?年关将至,HR们最头疼的事非“绩效考核”莫属! 这不只是关系到员工的年终奖和绩效工资,更直接影响到来年的薪资调整和职业晋升。大家都盯着这个结果:谁能拿到那份丰厚的年终奖,谁能涨薪,谁又被“冷冻”了。 对HR来说,如何在这场考核中…

(单调)队列优化多重背包

省流:复杂度是 \(O(NM)\) 的。0 多重背包可以通过枚举选的个数做到 \(O(N^2 M)\)。 转移是 \(f_j=\max(f_{j-k\times w_i}+v_i\times k)\)。 1 注意到你每次转移好像只用到了一部分 \(f_j\),并且 \(j-k\times w_i\) 这个东西 \(j\bmod w_i\) 都相同,考虑将 \(j\bmod w_i\) 相…

关于python枚举的基本用法

简介 关于枚举类型。个人理解就是批量宏定义,并且是自增的id,下面直接写用法; enum用法 创建一个枚举变量 import enum labs_category=enum.Enum("labs_category",("a","b","c"))基本方法直接访问指定枚举对象访问枚举成员的变量名…