Nodejs 第三十九章(knex)

news/2024/9/23 1:33:58/

knex

Knex是一个基于JavaScript的查询生成器,它允许你使用JavaScript代码来生成和执行SQL查询语句。它提供了一种简单和直观的方式来与关系型数据库进行交互,而无需直接编写SQL语句。你可以使用Knex定义表结构、执行查询、插入、更新和删除数据等操作。

https://knexjs.org/guide/query-builder.html#withrecursive

Knex的安装和设置

knex支持多种数据库 pg sqlite3 mysql2 oracledb tedious

用什么数据库安装对应的数据库就行了

#安装knex
$ npm install knex --save#安装你用的数据库
$ npm install pg
$ npm install pg-native
$ npm install sqlite3
$ npm install better-sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install tedious

连接数据库

import knex from 'knex'
const db = knex({client: "mysql2",connection: config.db
})
db:user: rootpassword: '123456'host: localhostport: 3306database: xiaoman

定义表结构

db.schema.createTable('list', (table) => {table.increments('id') //id自增table.integer('age') //age 整数table.string('name') //name 字符串table.string('hobby') //hobby 字符串table.timestamps(true,true) //创建时间和更新时间
}).then(() => {console.log('创建成功')
})

实现增删改差

import mysql2 from 'mysql2/promise'
import fs from 'node:fs'
import jsyaml from 'js-yaml'
import express from 'express'
import knex from 'knex'
const yaml = fs.readFileSync('./db.config.yaml', 'utf8')
const config = jsyaml.load(yaml)
// const sql = await mysql2.createConnection({
//    ...config.db
// })
const db = knex({client: "mysql2",connection: config.db
})const app = express()
app.use(express.json())
//查询接口 全部
app.get('/', async (req, res) => {const data = await db('list').select().orderBy('id', 'desc')const total = await db('list').count('* as total')res.json({code: 200,data,total: total[0].total,})
})
//单个查询 params
app.get('/user/:id', async (req, res) => {const row = await db('list').select().where({ id: req.params.id })res.json({code: 200,data: row})
})//新增接口
app.post('/create', async (req, res) => {const { name, age, hobby } = req.bodyconst detail = await db('list').insert({ name, age, hobby })res.send({code: 200,data: detail})
})//编辑
app.post('/update', async (req, res) => {const { name, age, hobby, id } = req.bodyconst info = await db('list').update({ name, age, hobby }).where({ id })res.json({code: 200,data: info})
})
//删除
app.post('/delete', async (req, res) => {const info = await db('list').delete().where({ id: req.body.id })res.json({code: 200,data: info})
})
const port = 3000app.listen(port, () => {console.log(`Example app listening on port ${port}`)
})

事务

你可以使用事务来确保一组数据库操作的原子性,即要么全部成功提交,要么全部回滚

例如A给B转钱,需要两条语句,如果A语句成功了,B语句因为一些场景失败了,那这钱就丢了,所以事务就是为了解决这个问题,要么都成功,要么都回滚,保证金钱不会丢失。

//伪代码
db.transaction(async (trx) => {try {await trx('list').update({money: -100}).where({ id: 1 }) //Aawait trx('list').update({money: +100}).where({ id: 2 }) //Bawait trx.commit() //提交事务}catch (err) {await trx.rollback() //回滚事务}})

http://www.ppmy.cn/news/1356771.html

相关文章

Postgresql常用命令

1、连接数据库, 默认的用户和数据库是postgres psql -h IP地址 -p 端口 -U 数据库名2、创建数据库命令 createdb [ option… ] [ dbname [ description ] ]dbname :数据库名 description : 关于新创建的数据库相关的说明 options:参数 3、访问数据库…

数衍科技连接CRM和营销系统,无代码API集成

{无代码开发的优势} 在数字化转型的浪潮中,无代码开发为企业带来了巨大的便利。数衍科技,这家专注于生态数据服务的国家高新技术企业,提供了一种无需依赖传统API开发的解决方案。企业可以通过其无代码开发平台,迅速构建数据连接&…

HarmonyOS 鸿蒙应用开发(十一、面向鸿蒙开发的JavaScript基础)

ArkTS 是HarmonyOS(鸿蒙操作系统)原生应用开发的首选语言。它是用于构建用户界面的一种TypeScript方言,扩展了TypeScript以适应HarmonyOS生态系统的UI开发需求。ArkTS 融合了TypeScript的静态类型系统和现代UI框架的设计理念,为开…

微信小程序如何配置服务器域名

要在微信小程序中配置服务器域名,您需要按照以下步骤进行操作: 登录微信公众平台(https://mp.weixin.qq.com/)。进入小程序管理后台。在左侧菜单中选择"开发",然后选择"开发设置"。在"服务器…

在k8s中,使用DirectPV CSI作为分布式存储的优缺点

DirectPV 提供了一种直接将物理卷(Physical Volumes)与 Kubernetes 集群中的 Pod 绑定的机制。 利用 DirectPV,你可以将相应的 PV 直接与节点上的物理存储设备(如磁盘)进行绑定,而无需通过网络存储服务(如 NFS 或 Ceph)来提供存储。这种直接访问物理卷的方式,有助于提…

MobaXterm的SFTP文件上传/下载

一、MobaXterm的简介 MobaXterm是一款功能强大的远程计算工具,集成了诸多网络工具和便利功能,包括SSH、X11服务器、SFTP等,支持Windows系统。用户可以使用MobaXterm来轻松管理远程服务器,进行文件传输,远程桌面显示等操…

cannot schedule new futures after interpreter shutdown

在google colab 的命令行执行程序,一直报cannot schedule new futures after interpreter shutdown 之前在别的服务器上就没事 程序的执行顺序 run.py > importlib.import_module(需要执行的文件) > 传给 threading.Thread 在importlib.import_module(需…

计算机网络概论和数据通信基础

文章目录 计算机网络概论从物理构成上看,计算机网络包括硬件、软件和协议三大部分计算机网络的功能组成计算机网络的分类网络体系结构分层与体系结构接口、协议和服务数据传送单位OSI模型TCP/IP模型 数据通信基础数字信号调制为模拟信号正交振幅调制QAM 模拟数据编码…