前端用数据库但不会写Sql怎么办?用Sequelize吖!
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/
入门
安装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
数据库连接
连接数据库很简单只需要两步,重要的是配置项要正确,不同的数据库可能配置项字段不通,一定要仔细查看文档中的配置。
-
第一步:引入sequelize
const { Sequelize } = require('sequelize')
-
第二步:创建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查询
总结
这篇文章是Sequelize基础入门,有很多详细的内容没有写的太清楚,如果感兴趣想要完整学习了解Sequelize请移步官方文档。
希望能帮到你们
转载自:https://juejin.cn/post/7244083820214747194