Node下的数据库操作——Sequelize
来源:互联网 发布:虚拟机快照限时软件 编辑:程序博客网 时间:2024/06/10 08:23
Async/Await应该是目前最简单的异步方案了,这里我们将使用它进行数据库操作。先来说一下它的基本规则:
async 表示这是一个async函数,await只能用在这个函数里面。
await 表示在这里等待promise返回结果了,再继续执行。
await 后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了…)
这里我们选择Node的ORM框架Sequelize来操作数据库。
因为Sequelize返回的对象是Promise,所以我们可以用then()和catch()分别异步响应成功和失败。
但是用then()和catch()仍然比较麻烦。有没有更简单的方法呢?
可以用ES7的await来调用任何一个Promise对象,这样我们写出来的代码就变成了:
(async () => { var pets = await Pet.findAll();})();
await等待的虽然是promise对象,但不必写.then(..),直接可以得到返回值。当我们使用await写时,既然.then(..)不用写了,那么.catch(..)也不用写,可以直接用标准的try catch语法捕捉错误。
(async () =>{ try{ var pets = await queryFromSomewhere("rabbit"); for (let p of pets) { await p.destroy(); } }catch(err){ console.log(err);}})();
下面来看一个完整的实例:
先在config.js中写入配置文件
var config = { database: 'test', // 使用哪个数据库 username: 'root', // 用户名 password: '12345', // 口令 host: 'localhost', // 主机名 port: 3306 // 端口号,MySQL默认3306};module.exports = config;
然后就可以在app.js中操作数据库了:
const Sequelize = require('sequelize');const config = require('./config');//创建一个sequelize对象实例:var sequelize = new Sequelize(config.database, config.username, config.password, { host: config.host, dialect: 'mysql', pool: { max: 5, min: 0, idle: 30000 }});//定义模型Pet,告诉Sequelize如何映射数据库表:var Pet = sequelize.define('pet', { id: { type: Sequelize.STRING(50), primaryKey: true }, name: Sequelize.STRING(100), gender: Sequelize.BOOLEAN, birth: Sequelize.STRING(10), createdAt: Sequelize.BIGINT, updatedAt: Sequelize.BIGINT, version: Sequelize.BIGINT}, { timestamps: false});//写入数据var now = Date.now();(async () => { var dog = await Pet.create({ id: 'd-' + now, name: 'haha', gender: false, birth: '2008-08-08', createdAt: now, updatedAt: now, version: 0});console.log('created: ' + JSON.stringify(dog));})();// 查询成功后会返回包含多个实例(instance)的数组。var queryFromSomewhere = async (animals) =>{ var pets = await Pet.findAll({ where: { name: animals||'pig' } }); console.log(`find ${pets.length} pets:`); for (let p of pets) { console.log(JSON.stringify(p)); } return pets;};// 通过获取的示例进行数据更新(async () => { try{ var pets = await queryFromSomewhere("dog"); for (let p of pets) { p.gender = true; p.updatedAt = Date.now(); p.version++; await p.save(); } }catch(err){ console.log(err); }})();// 通过获取的示例进行数据更新(async () =>{ try{ var pets = await queryFromSomewhere("rabbit"); for (let p of pets) { await p.destroy(); } }catch(err) { console.log(err); }})();
因为Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。
首先我们要知道Model相当于数据库中表,有时它也会被称为“模型”或“工厂”。Model不能通过构造函数创建,而只能通过sequlize.define方法来定义或通过sequlize.import导入。通过define定义一个Model,就相当于定义了一种模型与数据表之间的映射关系,通过模型可以实现对表记录的增、删、改、查等操作。
因为只是简单实例就没有写暴露接口,全部堆在app.js中使用匿名函数立即执行的方式进行运行,在实际开发中应当分成不同模块暴露接口供其他模块调用即可。
以下是运行的结果:
- Node下的数据库操作——Sequelize
- node+sequelize实现单表多表操作
- Node.js使用Sequelize操作MySQL
- node.js项目中基于mysql利用sequelize-auto对照数据库自动生成相应的models
- sequelize node数据库连接库
- Sequelize 常用操作demo
- node.js-ORM数据库框架sequelize使用总结 超时查询、缓存查询、多表关联查询
- Node.js下Sequelize关闭输出并输入到Log4js日志方法
- Sequelize 事务大并发下造成的死锁问题。
- Node实践总结4——数据库操作
- Node.js的mysql数据库操作
- Node.js的mysql数据库操作
- 分针网—每日分享:Node.js操作mongodb数据库
- 基于express框架下Node.js+MySQL连接池的数据库增添操作
- sequelize的使用
- 【知识整理】Node.js-Sequelize之模型(表)之间的关联关系
- Node.js使用Sequelize ORM框架
- node.js和MySQL使用Sequelize
- Python的if判断以及for循环、range()函数
- 将excel导入mysql(使用navicat)
- Pandas 对象储存
- 修改UITableViewCell左滑删除按钮的样式和自定义
- android 中如何模拟back键
- Node下的数据库操作——Sequelize
- 基于XMLSchema的简化配置方式也就是Spring中的命名空间以及国际化
- 一张图,一分钟,读懂什么是资源服务总线!
- SET NOCOUNT ON 作用
- Linux环境下 UDP服务端/客户端代码
- JVM高级特性与实践(六):Class类文件的结构(访问标志,索引、字段表、方法表、属性表集合)
- Android反编译工具的使用-Android Killer
- SQL 之 concat_ws 和 concat
- SQL 关于apply的两种形式cross apply 和 outer apply