You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{Database}from"sqlite3"// 创建数据库,或打开已有的数据库constdb=newDatabase(__dirname+'/demo.db')// 运行SQLdb.run('CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TINYTEXT, introduction TEXT)')// 关闭数据库db.close()
Knex
Knex 的定位是SQL查询构建器。它提供一组对Node.js开发者友好API,替代拼写SQL查询语句的过程,并代理开发者与SQL客户端(针对特定 MS 开发的 npm 库)的交互。
importknexfrom'knex'// 打开数据库constclient=knex({client: 'sqlite3',connection: {filename: 'sqlite3/demo.db'},useNullAsDefault: true})// 增: insert into books values (null, "nodejs-roadmap", "A notebook for studying Node.js")awaitclient('books').insert({title: 'nodejs-roadmap',introduction: 'A notebook for studying Node.js',})console.log('insert')// 查: select * from books where title="nodejs-roadmap" limit 1constselected=awaitclient('books').select().where({title: 'nodejs-roadmap'}).first()console.log('select',selected)// 改: update books set title="node.js roadmap" where id in (select id where title="nodejs-roadmap" limit 1)awaitclient('books').where({title: 'nodejs-roadmap'}).first().update({title: 'node.js roadmap'})constupdated=awaitclient('books').select().where({title: 'node.js roadmap'}).first()console.log('update',updated)// 删: delete from booksawaitclient('books').del()console.log('delete')// 关闭数据库client.destroy()
import{Sequelize,DataTypes}from'sequelize'constsequelize=newSequelize({dialect: 'sqlite',storage: 'sqlite3/demo.db',})constBooks=sequelize.define('books',{id: {type: DataTypes.INTEGER,allowNull: false,autoIncrement: true,primaryKey: true,},title: DataTypes.STRING,introduction: DataTypes.STRING,},{timestamps: false,})console.log(Books===sequelize.models.books)// true// 增: insert into books values (null, "nodejs-roadmap", "A notebook for studying Node.js")awaitBooks.create({title: 'nodejs-roadmap',introduction: 'A notebook for studying Node.js',})console.log('insert')// 查: select * from books where title="nodejs-roadmap" limit 1constselected=awaitBooks.findAll({where: {title: 'nodejs-roadmap',},limit: 1,})console.log('select',selected[0].dataValues)// 改: update books set title="node.js roadmap" where id in (select id where title="nodejs-roadmap" limit 1)awaitBooks.update({title: 'node.js roadmap',},{where: {title: 'nodejs-roadmap',},limit: 1,})constupdated=awaitBooks.findAll()console.log('update',updated.map((item)=>item.dataValues))// 删:delete from booksawaitBooks.destroy({truncate: true,// truncate 不能回滚,实际使用的 delete})console.log('delete')
import{PrismaClient}from'@prisma/client'constprisma=newPrismaClient()// 增: insert into books values (null, "nodejs-roadmap", "A notebook for studying Node.js")awaitprisma.books.create({data: {title: 'nodejs-roadmap',introduction: 'A notebook for studying Node.js',},})console.log('insert')// 查: select * from books where title="nodejs-roadmap" limit 1constselected=awaitprisma.books.findFirst({where: {title: 'nodejs-roadmap',},})console.log('select',selected)// 改: update books set title="node.js roadmap" where id in (select id where title="nodejs-roadmap" limit 1)awaitprisma.books.updateMany({data: {title: 'node.js roadmap',},where: {id: {in: (// 由于分成2次查询,容易遇到并发问题awaitprisma.books.findMany({select: {id: true,},where: {title: 'nodejs-roadmap',},take: 1,})).map((item)=>item.id),},},})constupdated=awaitprisma.books.findMany()console.log('update',updated)// 删:delete from booksawaitprisma.books.deleteMany()console.log('delete')
关系型数据库(Relational Database,RDB)是指采用了关系模型来组织数据的数据库。
关系模型包括数据结构(如二维表)、操作指令集合(SQL语句)、完整性约束(表内数据约束、表与表之间的约束)。
SQL(Structured Query Language)是访问和操作关系型数据库的标准语言。
有代表性的关系数据库管理系统(Relational Database Management System,RDBMS)有:
得益于SQL标准化,SQL适用于所有的RDBMS。
在 Node.js 中,使用 RDBMS 除了有针对特定RDBMS开发的 npm 库,也有兼容多RDBMS的 npm 库。考虑迁移数据库的可能性,推荐在生产环境使用兼容多RDBMS的 npm 库。
本文以 SQLite 为例,在 Node.js 中使用以下 npm 库分别实现操作 RDB。
SQLite
Knex
Knex 的定位是SQL查询构建器。它提供一组对Node.js开发者友好API,替代拼写SQL查询语句的过程,并代理开发者与SQL客户端(针对特定 MS 开发的 npm 库)的交互。
Sequelize
Sequelize 是一个Node.js ORM(Object Relational Mapping,对象关系映射)工具。
ORM工具作用是将数据库表的概念与面向对象编程中的对象概念,通过映射联系起来,以便使用面向对象编程的方式操作关系型数据库。
连接数据库
定义对象模型
使用对象描述表结构
操作
Prisma
Prisma 在ORM工具的基础上,使用自定义的 schema 来创建和维护数据库表结构。这样做有效节省了ORM工具重复描述表结构的工作。
schema
以下是
schema.prisma
文件运行 prisma CLI 命令,根据 schema 生成 SQLite 数据库文件
demo.db
操作
Demo
The text was updated successfully, but these errors were encountered: