likes
comments
collection
share

前端用数据库但不会写Sql怎么办?用Sequelize吖!

作者站长头像
站长
· 阅读数 35

Sequelize介绍

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

前言

我是在工作中有一个electron项目需要将数据存到用户的本地,模拟断网情况的操作,所以就用到了本地数据库。数据库用的是sqlite3,开发的时候需要用sql语句,有的语句可能还挺复杂。虽然以前上学的时候学过php和sql,但是现在早就忘光了。于是我就从网上尝试找了一下如何不写sql语句也能操作数据库,然后我就和Sequelize相遇了。如获至宝,我马上就开始了努力的学习之路!

前端开发有时候也会需要用到本地数据库,但是前端开发一般不会sql语句,如果临时去学sql语句可能要花比较多的时间才能完全掌握,特别是一些比较复杂的sql查询。那这时候就需要Sequelize上场了!Sequelize封装了操作数据库的sql语句方法,在使用数据库的时候就可以直接用Sequelize封装的方法操作数据库,我们需要做的就是往方法中传入参数或数据。Sequelize内部会执行对应的sql语句,这样我们前端开发人员就可以更方便的操作数据库。

简而言之: Sequelize可以帮助我们用JavaScript代替Sql语句操作数据库

这样对前端来说是不是“泰裤辣”!

官方文档

中文文档:www.sequelize.cn/

英文文档:sequelize.org/

前端用数据库但不会写Sql怎么办?用Sequelize吖!

入门

安装sequelize

npm i sequelize

安装数据库驱动程序

根据本地使用的数据库安装对应的数据库驱动,这里以sqlite3为例

npm i sqlite3

如果使用的是其他的数据库,也可安装其他对应的数据库驱动

# 使用 npm
npm i pg pg-hstore # PostgreSQL
npm i mysql2 # MySQL
npm i mariadb # MariaDB
npm i sqlite3 # SQLite
npm i tedious # Microsoft SQL Server
npm i ibm_db # DB2
# 使用 yarn
yarn add pg pg-hstore # PostgreSQL
yarn add mysql2 # MySQL
yarn add mariadb # MariaDB
yarn add sqlite3 # SQLite
yarn add tedious # Microsoft SQL Server
yarn add ibm_db # DB2

数据库连接

连接数据库很简单只需要两步,重要的是配置项要正确,不同的数据库可能配置项字段不通,一定要仔细查看文档中的配置。

  1. 第一步:引入sequelize

    const { Sequelize } = require('sequelize')
    
  2. 第二步:创建Sequelize 实例

    // 连接数据库
    const sequelize = new Sequelize({
      dialect: 'sqlite',  // 数据库类型
      storage: './myData.db',  // 数据库文件
      logging: false,  // 记录日志
      define: {
        timestamps: false, // 是否自动向表中添加createdAt(创建时间)和updatedAt(更新时间)字段    
      }
    })
    

其他数据库请查看官方文档:连接到数据库

关闭数据库连接

sequelize.close()

模型基础

数据库创建好以后下一步就是创建表了,表是根据配置的表结构创建的,在sequelize中表结构就叫做模型,模型中会包含很多字段配置,然后通过sequelize.define方法定义模型。

创建模型

sequelize.define方法需要三个参数:第一个是表名称,第二个是表字段配置,第三个是模型配置。

const { Sequelize, DataTypes } = require('sequelize');
// 连接数据库
const sequelize = new Sequelize({
  dialect: 'sqlite',  // 数据库类型
  storage: './myData.db',  // 数据库文件
  logging: false,  // 记录日志
  define: {
    timestamps: false, // 是否自动向表中添加createdAt(创建时间)和updatedAt(更新时间)字段    
  }
})
// 创建模型
const User = sequelize.define('User', {
  // 在这里定义模型属性
  firstName: {
    type: DataTypes.STRING, // 数据类型
    allowNull: false
  },
  lastName: {
    type: DataTypes.STRING
    // allowNull 默认为 true
  }
}, {
  // 这是其他模型参数
});

// `sequelize.define` 会返回模型
console.log(User === sequelize.models.User); // true

更多详细参数请查看官方文档:模型基础

同步到数据库

模型创建好以后需要同步到数据库,同步后数据库中就会有对应的表。将模型同步到数据库是通过model.sync方法,这个方法是异步的,返回一个Promise,接收一个j参数,这个参数中是同步时的配置项。

await User.sync({ force: true });
console.log("用户模型表刚刚(重新)创建!");
  • User.sync() - 如果已经存在,则不执行任何操作,如果表不存在,则创建该表
  • User.sync({ force: true }) - 将创建表,如果表已经存在,则将其首先删除
  • User.sync({ alter: true }) - 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.

sync({ force: true })sync({ alter: true }) 可能是破坏性操作. 因此,不建议将它们用于生产环境中。

数据类型

在定义模型中的字段时需要传一个数据类型,定义字段是什么类型的数据。数据类型需要从DataTypes中获取

const { DataTypes } = require("sequelize"); // 导入内置数据类型

在sequelize中有以下常用的数据类型

  • 字符串

    • DataTypes.STRING
  • 布尔

    • DataTypes.BOOLEAN
  • 数字

    • DataTypes.INTEGER(常用)
    • DataTypes.BIGINT
    • DataTypes.FLOAT
    • DataTypes.REAL
    • DataTypes.DOUBLE
    • DataTypes.DECIMAL
  • 日期:

    • DataTypes.DATE
    • DataTypes.DATEONLY
  • UUID

    • DataTypes.UUID
    • DataTypes.UUIDV4

更多数据类型请查看官方文档:数据类型

模型实例

创建好表以后下一步就是应该往表中插入数据了,表中的数据是通过模型创建的,所以数据就是模型的实例,一条数据就是一个实例,创建好实例后需要同步到数据库中。

首先先定义个模型,也就是先创建一个表。然后以这个表结构为例创建一个模型实例。

// 创建模型
const User = sequelize.define('User', {
  userName: {
    type: DataTypes.STRING, // 数据类型
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER
  }
});

增:创建实例(创建数据)

用上面定义的模型创建一个模型实例,模型实例通过create方法进行创建

const user = await User.create({ userName: "高启强", age: 48 })
console.log(user.userName); // "高启强"

删:删除实例

通过destroy方法删除实例

const user = await User.create({ userName: "高启强", age: 48 })
console.log(user.userName); // "高启强"
// 删除实例
await user.destroy();  

改:更新实例

通过update更新实例

const user = await User.create({ userName: "高启强", age: 48 })
console.log(user.userName); // "高启强"

await user.update({ userName: "高启盛" })
console.log(user.userName); // "高启盛"

查:查询实例

查询所有表数据

通过findAll方法查询所有数据

const users = await User.findAll();

查询单个数据

通过findOne查询单个数据

const user = User.findOne({ where: { userName: "高启强" } })

查询是最常用的方法,这里只是列了两个比较简单的查询,还有很多的查询方法和参数可以进行复杂的查询。更多复杂的查询下次可以单独写一篇文章叙述。

更多详细查询方法请查看官方文档:Where查询

总结

前端用数据库但不会写Sql怎么办?用Sequelize吖!

这篇文章是Sequelize基础入门,有很多详细的内容没有写的太清楚,如果感兴趣想要完整学习了解Sequelize请移步官方文档

希望能帮到你们

转载自:https://juejin.cn/post/7244083820214747194
评论
请登录