Sequelize 是一个基于 Node.js 的 ORM 框架,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL。在前后端分离的应用中,Sequelize 是一个非常好用的工具,可以方便地操作数据库。本文将详细介绍 Sequelize 实现数据的增删改查及其相关参数。
安装 Sequelize
在使用 Sequelize 之前,需要先安装它。可以通过 npm 安装:
npm install sequelize
同时,还需要安装相应的数据库驱动,例如 MySQL:
npm install mysql2
创建 Sequelize 实例
在使用 Sequelize 之前,需要先创建一个 Sequelize 实例。可以通过以下方式创建:
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql', logging: false });
其中,第一个参数是数据库名,第二个参数是用户名,第三个参数是密码。host
是数据库的地址,dialect
是数据库类型,可以是 mysql、postgres、sqlite 和 mssql。logging
表示是否在控制台输出 SQL 语句。
定义模型
在使用 Sequelize 进行数据库操作之前,需要先定义模型。模型是指数据库中的表,可以通过 Sequelize 定义。例如,下面是一个简单的用户模型:
// javascriptcn.com 代码示例 const User = sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: Sequelize.STRING, allowNull: false }, age: Sequelize.INTEGER, email: Sequelize.STRING });
其中,sequelize.define
方法用于定义模型。第一个参数是模型名,第二个参数是模型属性。模型属性包括字段名、数据类型、是否允许为空、是否为主键等信息。
数据的增删改查
定义好模型之后,就可以使用 Sequelize 进行数据的增删改查了。下面将详细介绍 Sequelize 支持的增删改查方法及其相关参数。
数据的增加
使用 Sequelize 进行数据的增加,可以使用 create
方法。例如,要增加一个名为“Tom”的用户,可以使用以下代码:
User.create({ name: 'Tom', age: 18, email: 'tom@example.com' }).then(user => console.log(user.toJSON()));
其中,create
方法的参数是一个对象,包含要插入的数据。插入成功后,会返回插入的数据。
数据的查询
使用 Sequelize 进行数据的查询,可以使用 findAll
方法。例如,要查询所有年龄大于 18 岁的用户,可以使用以下代码:
User.findAll({ where: { age: { [Op.gt]: 18 } } }).then(users => console.log(users.map(user => user.toJSON())));
其中,findAll
方法的参数是一个对象,包含查询条件。查询条件使用 where
属性指定,可以使用 Op
对象提供的运算符进行比较。比如,Op.gt
表示大于,Op.lt
表示小于,Op.between
表示在两个值之间等等。
如果要查询单个数据,可以使用 findOne
方法。例如,要查询名为“Tom”的用户,可以使用以下代码:
User.findOne({ where: { name: 'Tom' } }).then(user => console.log(user.toJSON()));
数据的修改
使用 Sequelize 进行数据的修改,可以使用 update
方法。例如,要将名为“Tom”的用户的年龄修改为 20,可以使用以下代码:
User.update({ age: 20 }, { where: { name: 'Tom' } }).then(() => console.log('Update successfully'));
其中,update
方法的第一个参数是要修改的数据,第二个参数是修改条件。修改成功后,会返回一个 Promise。
数据的删除
使用 Sequelize 进行数据的删除,可以使用 destroy
方法。例如,要删除名为“Tom”的用户,可以使用以下代码:
User.destroy({ where: { name: 'Tom' } }).then(() => console.log('Delete successfully'));
其中,destroy
方法的参数是删除条件。删除成功后,会返回一个 Promise。
相关参数
除了上述增删改查方法之外,Sequelize 还提供了一些参数,可以用于更加细致地控制数据的操作。下面将介绍一些常用的参数。
字段选择
在查询数据时,可以使用 attributes
参数指定需要查询的字段。例如,要查询名字和年龄,可以使用以下代码:
User.findAll({ attributes: ['name', 'age'] }).then(users => console.log(users.map(user => user.toJSON())));
数据限制
在查询数据时,可以使用 limit
和 offset
参数限制查询结果的数量。例如,要查询前 10 条数据,可以使用以下代码:
User.findAll({ limit: 10 }).then(users => console.log(users.map(user => user.toJSON())));
排序
在查询数据时,可以使用 order
参数指定查询结果的排序方式。例如,要按照年龄从小到大排序,可以使用以下代码:
User.findAll({ order: [ ['age', 'ASC'] ] }).then(users => console.log(users.map(user => user.toJSON())));
分组
在查询数据时,可以使用 group
参数对查询结果进行分组。例如,要按照年龄进行分组,可以使用以下代码:
User.findAll({ attributes: [ 'age', [Sequelize.fn('COUNT', Sequelize.col('id')), 'count'] ], group: 'age' }).then(results => console.log(results));
其中,Sequelize.fn
方法用于调用 SQL 函数,Sequelize.col
方法用于指定列名。
示例代码
下面是一个完整的示例代码,包含了 Sequelize 的数据的增删改查及其相关参数的使用:
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql', logging: false }); const User = sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: Sequelize.STRING, allowNull: false }, age: Sequelize.INTEGER, email: Sequelize.STRING }); (async () => { await sequelize.sync({ force: true }); await User.create({ name: 'Tom', age: 18, email: 'tom@example.com' }); await User.create({ name: 'Jerry', age: 20, email: 'jerry@example.com' }); await User.update({ age: 21 }, { where: { name: 'Tom' } }); await User.destroy({ where: { name: 'Jerry' } }); const users = await User.findAll({ where: { age: { [Sequelize.Op.gt]: 18 } }, attributes: ['name', 'age'], order: [ ['age', 'ASC'] ], limit: 10, offset: 0 }); console.log(users.map(user => user.toJSON())); })();
总结
本文介绍了 Sequelize 实现数据的增删改查及其相关参数。Sequelize 是一个非常好用的 ORM 框架,可以方便地操作数据库。希望本文对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657470a0d2f5e1655ddaf70b