Prisma数据库ORM框架学习

初始化项目

中文网站
点击快速开始,点击创建sql项目,后面一步一步往后走

这个博主也挺全的,推荐下

可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了

1.vscode打开一个空文件夹

2.npm init -y 初始化package.json

3.安装相关依赖

npm install prisma
// 或者
yarn add prisma

继续安装

yarn add @prisma/client

4.指定数据库

// 如果不想安装或者配置数据环境就用下面这个sqlite,轻量级
npx prisma init --datasource-provider sqlite
// 下面这个是指定连接mysql的
npx prisma init --datasource-provider mysql

这时你会发现项目目录下多了 schema 文件和 env 文件:

5.env文件,内容大概如下(sqlite数据库可以跳过这一步)

这个文件里面存的就是连接信息

# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-stringsDATABASE_URL="mysql://root:admin@localhost:3306/mydb"# DATABASE_URL="SqlName://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA"
# SqlName: 使用的数据库类型
# USER: 你的数据库用户名
# PASSWORD: 数据库用户的密码
# PORT: 数据库服务器运行的端口(通常5432用于 PostgreSQL)
# DATABASE: 数据库名称
# SCHEMA: 数据库中schema的名称(这个可以固定写死,可以忽略)

6.在schema文件夹下面的.schema文件内新增模型(数据库的表)

先测试下有没有连接数据库
执行npx prisma db pull

  • 然后数据库如果存在的话,并且里面还有表的话,那么表的创建集合的语句就会在.schema文件内被创建出来

如果.schema文件代码没有高亮显示的话,去插件安装一下Prisma这个插件,安装完成就有代码高亮效果了

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-initgenerator client {provider = "prisma-client-js"
}datasource db {provider = "mysql"url      = env("DATABASE_URL")
}model Post {id        Int      @id @default(autoincrement())createdAt DateTime @default(now())updatedAt DateTime @updatedAttitle     String   @db.VarChar(255)content   String?published Boolean  @default(false)author    User     @relation(fields: [authorId], references: [id])authorId  Int
}model Profile {id     Int     @id @default(autoincrement())bio    String?user   User    @relation(fields: [userId], references: [id])userId Int     @unique @map("user_id")@@map("profile ")
}model User {id      Int      @id @default(autoincrement())email   String   @uniquename    String?posts   Post[]profile Profile?
}
  • @id 是主键
  • @default(autoincrement()) 是指定默认值是自增的数字
  • @unique 是添加唯一约束
  • @relation 是指多对一的关联关系,通过authorld关联User的id
  • ? 指当前字段不是必填项
  • @default() 设置默认值
  • @map(“”) 给字段起别名
  • @@map("profile ") 表的别名
  • @db.XXX 指定具体的数据类型,以mysql为例db.VarChar(255) 打点的时候vscode会提示关于mysql的相关数据类型,使用db.XXX相当于使用mysql具体的数据类型
  • @@index([字段1,字段2]) 联合索引
  • @@id([字段1,字段2]) 联合主键(适用于多对多关联表的中间表)

7.执行下面代码生成(更新)表

推荐使用第二个db push,如果需要查看创建表的sql语句推荐第一个
都是没有表会创建表,有表则会同步数据

// 后面的name值随便写(这个命令会生成建表结构,在prisma/migrations/文件夹/里面)
// 还会生成client代码
npx prisma migrate dev --name xiaoji// 或者
npx prisma db push  // 无sql文件产生

8.在node_modules/.prisma/client/index.js找到相关信息

如果文件内包含我们刚刚创建的数据库,然后就可以用 @prisma/client 来做 CRUD 了。

exports.Prisma.ModelName = {Post: 'Post',Profile: 'Profile',User: 'User'
};

在这里插入图片描述

快速入门ORM框架Peisma并使用CRUD小试一下

单张表添加数据

根目录下创建src/index.js内容如下:

import { PrismaClient } from "@prisma/client";
// const prisma = new PrismaClient(); // 不会打印sql语句
const prisma = new PrismaClient({log: [{ emit: "stdout", level: "query" }], // 可以打印sql语句});async function test1(){// 在user表新增一条数据await prisma.user.create({data:{name:"xiaoji",email:"111@qq.com"}})// 在user表再新增一条数据await prisma.user.create({data:{name:"sengren",email:"222@qq.com"}})// 将数据查询出来const users = await prisma.user.findMany();console.log('users',users);
}
test1()

下载安装插件
在这里插入图片描述

在当前index.js文件内直接右键->run Code->查看控制台

打印结果为:

users [{ id: 1, email: '111@qq.com', name: 'xiaoji' },{ id: 2, email: '222@qq.com', name: 'sengren' }
]

数据库结果为:
**在这里插入图片描述**

一对多添加数据

接下来再来插入新的user数据和它的两个post(表关联的数据)
新建js文件或者把刚刚的文件替换下内容,内容如下:

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient({log: [{ emit: "stdout", level: "query" }], // 可以打印sql语句
});async function test1() {// 在user表新增一条数据const user = await prisma.user.create({data: {name: "hahaha",email: "333@qq.com",posts:{create:[{title:"aaa",content:"aaaaa"},{title:"bbb",content:"bbbbb"}]}},});console.log("users", user);
}
test1();

右键->runCode运行

在这里插入图片描述
如果报错import错误,则在package.json里面新增一个属性,具体如下

{"name": "prisma","version": "1.0.0","description": "","main": "index.js","type": "module",  // 新增(将js文件模块化,就可以正常使用import了)"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {"@prisma/client": "^5.15.0","prisma": "^5.15.0"}
}

然后重新右键runCode即可

查看user表数据

在这里插入图片描述

查看post表

在这里插入图片描述

单表更新

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient({log: [{ emit: "stdout", level: "query" }], // 可以打印sql语句});async function test1(){// 更新post表的id字段为3的数据的content为nihaoawait prisma.post.update({where:{id:3},data:{content:"nihao"}})
}
test1()

效果图
在这里插入图片描述

单表删除

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient({log: [{ emit: "stdout", level: "query" }], // 可以打印sql语句
});async function test1() {// 删除post表id为3的数据await prisma.post.delete({where:{id:3}})
}
test1();

生成对应的模型文档(html页面)

安装

yarn add prisma-docs-generator

配置

在prisma/schema.prisma新增一条

generator docs {provider = "node node_modules/prisma-docs-generator"
}

更新配置

npx prisma generate

然后prisma下面就新增了一个docs文件夹

在这里插入图片描述

运行index.html

看到的页面如下所示

在这里插入图片描述
生成这个文档对于做项目查询相关的crud操作非常方便

一对一和一对多和多对多关系的表创建

一对多的表创建

// 部门 一的一方
model Department {id Int @id @default(autoincrement())name String @db.VarChar(20)createTime DateTime @default(now()) // @default(now()) 插入数据自动填入当前时间updateTime DateTime @updatedAt // 更新时间使用@updatedAt 会自动设置当前时间employees Emplyee[] // 员工表
}// 员工 多的一方
model Emplyee {id Int @id @default(autoincrement())name String @db.VarChar(20)phone String @db.VarChar(30

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

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

相关文章

SpringTask-Timer实现定时任务

1、Timer 实现定时任务 1.1、JDK1.3 开始推出定时任务实现工具。 1.2、API 执行代码 public static void main(String[] args) throws ParseException {Timer timer new Timer();String str"2024-06-10 23:24:00";Date date new SimpleDateFormat("yyyy-MM…

svn的使用

【图文详解】入职必备——SVN使用教程-CSDN博客 使用SVNBucket作为服务端,来辅助学习. 什么时候会产生冲突呢? 原本A,B,服务器的版本都一致,都是最新版. A修改文件m,向服务器提交 B修改文件m,向服务器提交,这时候出现了冲突 双击冲突的文件,手动修改

React保姆级教学

React保姆级教学 一、创建第一个react项目二、JSX基本语法与react基础知识1、 插值语法:2、 循环一个简单列表3、 实现简单条件渲染4、 实现复杂的条件渲染5、 事件绑定6、 基础组件(函数组件)7、 使用useState8、 基础样式控制9、 动态类名1…

MySQL限制登陆失败次数配置

目录 一、限制登陆策略 1、Windows 2、Linux 一、限制登陆策略 1、Windows 1)安装插件 登录MySQL数据库 mysql -u root -p 执行命令安装插件 #限制登陆失败次数插件 install plugin CONNECTION_CONTROL soname connection_control.dll;install plugin CO…

C++ | Leetcode C++题解之第143题重排链表

题目: 题解: class Solution { public:void reorderList(ListNode* head) {if (head nullptr) {return;}ListNode* mid middleNode(head);ListNode* l1 head;ListNode* l2 mid->next;mid->next nullptr;l2 reverseList(l2);mergeList(l1, l…

vscode 访问容器的方式

方法一:先连服务器,再转入容器 配置客户机A M1. 客户机A通过 vscode 连接服务器B,再连接容器C 配置vscode的ssh配置文件:~.ssh\config(当需要多个不同的连接时,使用 IdentityFile 指定公钥位置)…

cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现

1.复现环境与工具 环境是在vulfocus上面 工具:GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module 参考攻击使用方式与原理:https://vulhub.org/#/environments/redis/4-unacc/ 2.复现 需要一个外网的服务器做&…

使用 C# 学习面向对象编程:第 2 部分

C# 类属性简介 属性在面向对象编程中起着至关重要的作用。它们允许我们从类外部访问类的私有变量。在类中使用私有变量是很好的。属性看起来像变量和方法的组合。属性有部分:“get 和 set”方法。get 方法应该返回变量,而 set 方法应该为其赋值。 步骤…

jmeter -n -t 使用非GUI模式运行脚本说明

命令模式下执行jmx文件 jmeter -n -t fatie.jmx -l results\t4.jtl -e -o results\h1 表示以命令行模式运行当前目录下的脚本fatie.jmx,将结果存入当前目录下的results\t1.jtl,并且生成html格式的报告,写入文件夹results\h1。 说明:生成结果的文件夹r…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作…

Matplotlib常见图汇总

Matplotlib是python的一个画图库,便于数据可视化。 安装命令 pip install matplotlib 常用命令: 绘制直线,连接两个点 import matplotlib.pyplot as plt plt.plot([0,5],[2,4]) plt.show() 运行结果如下: 多条线:…

基于I2C协议的OLED显示(利用U82G库)

目录 一、I2C协议 1、了解I2C协议的基本原理和时序协议 基本原理 时序协议 2、掌握0.96寸OLED屏的工作原理,汉字点阵显示原理 OLED 工作原理 汉字点阵显示原理 3、掌握开源GUI库U82G在stm32上的移植编译方法,以及图形界面可视化技术。 二、具体…

进程概念(二)

目录 进程优先级基本概念查看系统进程PRI and NIPRI vs NI修改进程优先级的命令renice修改优先级进程其他概念 环境变量基本概念查看环境变量方法常见环境变量PATHHOMESHELL 查看环境变量环境变量相关的命令 环境变量特征命令行参数main函数中的俩个参数 argc argvmain函数的第…

通用信息提取数据预处理

train_data./datasets/duuie output_folder./datasets/duuie_pre ignore_datasets["DUEE", "DUEE_FIN_LITE"] schema_folder./datasets/seen_schema # 对CCKS2022 竞赛数据进行预处理 import shutil # shutil.copytree(train_data,output_folder) impor…

Ansible离线部署 之 Zabbix

Ansible介绍 Ansible 是一个自动化平台,用于 IT 自动化,如配置管理、应用部署、任务自动化等。Ansible 使用 SSH 来连接到远程机器,并执行预定义的任务。Ansible 的主要特点是其简单性、易用性和强大的功能集。 以下是 Ansible 的一些关键特…

贪吃蛇游戏的编程之旅:在Windows PyCharm中使用Python

在电脑游戏的发展史中,贪吃蛇游戏无疑是其中的经典之作。许多人对其简单而上瘾的游戏玩法念念不忘。对编程爱好者来说,重新编写一个贪吃蛇游戏不仅是对青春回忆的一种致敬,也是一个极佳的学习机会。本文将引导你在Windows系统的PyCharm环境下…

DHCP服务

文章目录 一、DHCP介绍二、DHCP应用场景三、DHCP工作原理3.1)工作方式3.2)工作原理解析3.3)计算机获得IP的时间点3.4)租约更新阶段 四、DHCP服务器部署4.1)DHCP安装4.2)DHCP配置文件详解4.3)DHCP启动 五、D…

LangChain开发【NL2SQL】应用

前言 关于LangGraph的简单介绍,请参考这篇博客: LangGraph开发Agent智能体应用【基础聊天机器人】-CSDN博客 对比LangChain实现NL2SQL 关于用LangChain开发NL2SQL的Agent应用,在这篇博客提供了完整的代码实现: LangChain开发…

图Transformer 推荐系统

文章目录 Graph Transformer for Recommendation摘要引言相关工作方法3.1 Graph Invariant Rationale Learning3.1.1 Graph Collaborative Rationale Discovery3.1.2 Global Topology Information Injection3.1.3 Rationale Discovery with Graph Transformer.3.1.4 Task-Adapt…

怎样快速获取Vmware VCP 证书,线上考试,voucher报名优惠

之前考一个VCP证书,要花大一万的费用,可贵了,考试费不贵,贵就贵在培训费,要拿到证书,必须交培训费,即使vmware你玩的很溜,不需要再培训了,但是一笔贵到肉疼的培训费你得拿…