添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Sequelize 使用教程

Sequelize 是一个基于 promise 的 Node.js ORM , 目前支持 Postgres , MySQL , MariaDB , SQLite 以及 Microsoft SQL Server . 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。

- 快速入门

1. 导入Sequelize的包文件

在项目路径下输入 npm i -S sequelize ,稍等片刻
在这里插入图片描述

2. 导入你的数据库的驱动包(这里以Mysql为例)

在项目路径下数据 npm i -S mysql2 ,稍等片刻
在这里插入图片描述

3. 创建数据库连接模型

新建一个文件名为MysqlConnection的js文件,详细代码解释看注释

const { Sequelize } = require('sequelize');
// 第一个参数:连接的数据库名
// 第二个参数:数据库的用户名
// 第三个参数:数据库的密码
const mysql = new Sequelize('mytest', 'root', 'root', {
    dialect: 'mysql',       // 这里可以改成任意一种关系型数据库
    host: 'localhost',      // 数据库服务器
    timezone: '+08:00',     // 这里是东八区,默认为0时区
    pool: {                 // 使用连接池
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000,
});
// 测试连接是否成功
(async () => {
    try {
        await mysql.authenticate();
        console.log('Connection has been established successfully.');
    } catch (error) {
        console.error('Unable to connect to the database:', error);
})();   // 多一个括号表示调用方法

使用 node MysqlConnection.js来执行一下文件
在这里插入图片描述

数据库连接成功,将连接测试注释掉,并在下面将mysql对象暴露

**tip:**如果你不理解为什么用module.exports来暴露对象的话,你可以参看这篇文章来帮助你的理解 https://blog.csdn.net/interestANd/article/details/119058481

// 将连接对象暴露出去
module.exports = mysql;

4. 新建数据库模型(类似于Java的pojo类)

这里举例新建一个BookModel.js

const { DataTypes } = require('sequelize')
// 将数据库连接对象导入
const sequelize = require('./MysqlConnection')
// 测试代码 导入对象成功
// console.log(sequelize);
// 创建模型
const Book = sequelize.define('book', {
    /** 书名 */
    name: {
        type: DataTypes.STRING,
        allowNull: false
    /** 价格 */
    price: DataTypes.INTEGER,
    /** 作者 */
    author: DataTypes.STRING,
    /** 类型 */
    type: DataTypes.STRING
});
// 导出模型
module.exports = Book;

5. 模型准备就绪,开始测试添加数据

注意:第一次运行时,要同步数据库中的表,推荐使用 sync(),可以参考下面中被注释掉的代码

  • 可以使用build +save 来实现插入数据库
const Book = require('./BookModel');
// 使用 build 新建一个BookModel对象
const comicBook = Book.build({
    name: 'Rick And Morty - The fifth season',
    price: 20,
    author: 'unknow',
    type: 'comic'
});     // 注意后面有 ( { 开头的一定要写 ; !
// 保存
(async () => {
    try {
        // 第一次运行要同步数据库,若没有这个数据库则新建,有则检查表结构与model是否一致,使用sync()当不一致时不作任何更改,不存在破坏性
        // await Book.sync();
        await comicBook.save();
        console.log("保存成功");
    } catch(error) {
        console.log("操作失败!\n"+error)
})();

运行结果:
在这里插入图片描述
在这里插入图片描述
可以看到,操作成功,但是多了 idcreatedAtupdateAt 三个字段。当我们不手动设置主键时,Sequelize 会自动为我们添加一个 id 的字段作为主键,而Sequelize 使用数据类型 DataTypes.DATE 自动向每个模型添加 createdAtupdatedAt 字段。

  • Sequelize提供了 create方法,该方法将上述的 build 方法和 save 方法合并为一个方法
const Book = require('./BookModel');
// create方法:将 build 与 save 合二为一
(async () => {
    await Book.create({
        name: 'Rick And Morty - The first season',
        price: 30,
        author: 'unkwon',
        type: 'comic'
    }).then(() => {
        console.log("操作成功");
    }).catch(error => {
        console.log("操作失败!\n" + error);
})();

运行结果:
在这里插入图片描述

  • Sequelize 还提供了批量创建和插入多个实例:bulkCreate传入一个数据即可实现批量创建插入
const Book = require('./BookModel');
async function saveMany(books) {
    try {
        await Book.bulkCreate(books);
        console.log("操作成功!");
    } catch(error) {
        console.log("操作失败!\n"+ error);
var books = [
    {name: 'book6'},
    {name: 'book7'},
    {name: 'book8'




    
},
    {name: 'book9'},
    {name: 'book10'},
saveMany(books);

运行结果:
在这里插入图片描述

6. 查询数据

  • findAll() 读取全部字段、所有数据
const Book = require('./BookModel');
async function findAllBooks() {
    try {
        const books = await Book.findAll();
        console.log("All Books:", JSON.stringify(books, null, 2));
    } catch(error) {
        console.log("操作失败!\n" + error);
findAllBooks();

**运行结果:**将所有的字段、数据都获得

  • findAll() 读取部分字段的所有数据
const Book = require('./BookModel');
async function findAllBooks() {
    try {
        const books = await Book.findAll({
            // select 'name', 'author', 'type' from books
            attributes: ['name', 'author', 'type']
        });
        console.log("All Books:", JSON.stringify(books, null, 2));
    } catch (error) {
        console.log("操作失败!\n" + error);
findAllBooks();

运行结果: 只获得筛选过后的结果
在这里插入图片描述

  • findAll() 条件筛选查询 where
const Book = require('./BookModel');
const { Op } = require('sequelize')
// 通过id查询
async function findBooksById(id) {
    const books = await Book.findAll({
        // select 'name', 'author', 'type' from books
        attributes: ['name', 'author', 'type'],
        where: {
            id: id
    });
    console.log("id 为 "+id+"的book:", JSON.stringify(books, null, 2));
findBooksById(3);
// 模糊查询
async function findBooksByNameLike() {
    const books = await Book.findAll({
        where: {
            name: { [Op.like]: '%Rick%' }
    console.log("All books which name like Rick:", JSON.stringify(books, null, 2));
findBooksByNameLike();

运行结果:
在这里插入图片描述

7. 更新数据:update

  • update 可以使用 where 来进行筛选
const Book = require('./BookModel');
async function updateById(id) {
    const res = await Book.update({ price: "199"}, {
        where: {
            id: id
    console.log(res)    // [ 1 ]
// 更改 id 为 10 的书的价格
updateById(10);

运行结果:
在这里插入图片描述
这里的 [ 1 ] 是表示成功更新了的数据数量。你查询到,但是没修改成功也不算;查询不到也是不算。

8. 删除数据:destroy

  • 通过 id 删除数据

    const Book = require('./BookModel');
    // async function addBookToDelete() {
    //     book = Book.create({
    //         name: 'i love nodejs',
    //         author: 'unknow',
    //         price: 1999999
    //     });
    // addBookToDelete();
    async function deleteById(id) {
        await Book.destroy({
            where: {
                id: id
    deleteById(5);
    

    **运行结果:**删除成功,查找结果为空

9. 托管事务

托管事务会自动处理提交或回滚事务。

  • 通过将回调传递给 sequelize.transaction 来启动托管事务
const sequelize = require('./MysqlConnection')
// const t = await sequelize.transaction();
const Book = require('./BookModel');
async function addBook() {
    try {
        const result = await sequelize.transaction(async (t) => {
            const book = await Book.create({
                name: 'testTransaction',
            }, { transaction: t });
            throw new Error();
            return book;    // 如果执行到此行,则表示事务已成功提交,`result`是事务返回的结果,这种情况下,result 中的数据就是 user
        });
    } catch (error) {
        console.log("数据回滚\n" + error);
// 执行 addBook() 方法
addBook();

运行结果:
第一种:出现异常时,数据回滚 ,没有插入到数据库中
在这里插入图片描述

第二种:将上面的抛出异常代码注释,正常提交事务
在这里插入图片描述
在这里插入图片描述

Sequelize 使用教程- 简介Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。- 快速入门1. 导入Sequelize的包文件在项目路径下输入 npm i -S sequelize ,稍等片刻2. 导入你的数据库的驱动包(这里以Mysql为例)在项目路径下数据 np 初始化我们的Sequelize缓存管理器: import SequelizeRedis from 'sequelize-redis'; import redis from 'redis'; import bluebird from 'bluebird'; // Let's promisify Redis bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); // Define your redisClient const redisClient = redis.createClie $ npm install --save sequelize # 还需要安装以下之一: $ npm install --save pg pg-hstore // postgreSql $ npm install --save mysql // mysql 或 mariadb $ npm install --save sqlite3 $ npm install --save tediou...
文章目录一、安装二、建立mysql连接三、编写表的model文件四、生成mysql中的表五、增删改查插入查找更新删除六、事务 通过npm安装sequelizemysql npm install --save sequelize npm install --save mysql2 二、建立mysql连接 接下来我们会用Sequelize的构造方法来创建一个mysql的连接实例。 先来看看sequelize官方文档中构造方法的定义 public constructor(database: stri
1、sequelize简介【sequelize官方文档】、【sequelize-v3到v6文档】 sequelize是众多ORM框架的一种,ORM框架的作用就是就是可以把关系型数据库表结构映射为javascript对象。通过ORM框架,对数据库进行 CURD时,不需要直接去书写 SQL语句,而是通过操作对象,进而由框架转化为具体的SQL语句进行查询,将对象转化表中的一条记录。 2、sequelize模型 模型是sequelize的本质,sequelize同过一个个的模型
使用SQL Server初级篇 首先你得了解SQL Server 数据库是用来存放数据的仓库,这个仓库的物理位置是在计算机上,其实数据库就是按照数据结构来组织、存储和管理数据的集合。 数据模型描述了数据在数据库中的存储模式,常用的有:关系模型、层次模型和网状模型。 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的 KaTeX数学公
什么是sequelizesequelize是一个orm框架,什么是orm呢?即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。 知道了sequelize是什么,很想在项目中使用起来吧!那接下来开始我们的第一步吧!在项目的根目录运行 npm i mysql2 sequelize -S 创建sequelize连接配置文件 依赖也有了,下面我
sequelize db:migrate 运行待执行的迁移 sequelize db:migrate:schema:timestamps:add 更新迁移表以获取时间戳 sequelize db:migrate:status 列出所有迁移的状态 sequelize db:migrate:undo 恢复迁移
sequelize是什么? sequelize是基于NodeJs的ORM框架,它适用于不同的数据库,如:Postgres、MySQL、SQLite、MariaDB,我们可以通过sequelize对数据库进行一系列的操作。通常我用它与MySQL一起使用。该文是我在使用sequelize做完项目后对sequelize的系统整理。 一、创建数据库和表,方便学习过程中书写示例代码 创建数据库 lesson CREATE DATABASE IF NOT EXISTS lesson DEFAULT
文章目录一、sequelize模块的使用二、sequelize实现多表连接查询三、小结 一、sequelize模块的使用 模块简介:Sequelize是一个用于Node.js 的非常优秀的ORM框架, 支持MySQL等多种关系型数据库。 1.ORM:对象关系映射。sequelize是实现了ORM思想的一个模块。 映射关系: 类-----表 ​ 属性----列​ 对象----行(元组) 2.使用过程: (1)导入sequelize模块(首先要安装该模块) npm install sequeli
nodejs写服务端的小伙伴们对sequelize一定不会陌生的,它是node端著名的ORM框架,支持MySQL, MariaDB, SQLite和Microsoft SQL Server等数据库。通过这个库我们可以实现如下功能: 生成表:使用js定义好表结构,直接将表同步生成到数据库中,省去了手动写sql建表的烦恼。 CRUD:通过sequlize提供的方法去实现数据库的查询等...
sequelize提供了批量插入数据的方法:Model.bulkCreate([…object]) let params = [{"name": "张三", "age": 21},{"name": "小李", "age": 20}]; let data = await model.bulkCreate(params); 以上代码便可以批量在数据库中插入数据,但是默认不会过滤掉重复的内容,比如我这次的数组里已经有张三这个人,下一次我插入数据库中就应该只插入小李而不会再次存入张三。 我们先来看下面这张图: