官网地址:Sequelize
Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects PostgreSQL, MySQL, SQLite and MSSQL and features solid transaction support, relations, read replication and more.
ORM: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
个人理解:sequelize可以建立与数据库中表形成关系数据映射的模型,然后使用自身提供的api来操作模型,从而操作数据库中的表。
一、安装
1、使用npm安装
前提:需要安装node
npm install --save sequelize
npm install --save mysql2
我用的数据库是mysql,可以根据需要进行安装
2、使用yarn安装
前提:需要安装yarn
yarn add sequelize
yarn add mysql2
二、配置
var Sequelize = require("Sequelize");
const sequelize = new Sequelize('数据库', '用户名', '密码', {
host: 'localhost',
port:'3306',
dialect: 'mysql',
timezone : "+08:00",
}); exports.sequelize = sequelize;
上面是连接数据库的一个简单配置,其他配置可以查看官方文档
三、定义model和表之间的映射
这里我创建了一个用户模型文件,User.js
var Sequelize = require("sequelize");
var sequelize = require('../config.js').sequelize; exports.User = sequelize.define('user',{
Id:{type:Sequelize.INTEGER},
name:{type:Sequelize.STRING},
password:{type:Sequelize.STRING},
number:{type:Sequelize.STRING},
mobile:{type:Sequelize.STRING},
email:{type:Sequelize.STRING},
divisionId:{type:Sequelize.STRING},
role:{type:Sequelize.INTEGER,defaultValue:0},
creditPoint:{type:Sequelize.INTEGER,defaultValue:100}
},{
freezeTableName:true,
timestamps:false
});
具体的数据类型可以查看官方文档中的 Model definition 说明
四、数据查询操作
var User = require('../models/User.js').User; User.findAll().then(user => {
console.log(user);
})
我在user表里插入了一行数据,查询结果打印如下:
五、错误整理
1、找不到表:Table 'experiment_car.users' doesn't exist
我的表名user,查询时默认加"s",变成了“users”
解决方法:在model文件里加上{ freezeTableName:true }的 配置,sequelize就不会在附加“s”字符
参考:sequelize for Node.js : ER_NO_SUCH_TABLE
2、找不到字段:Unknown column 'createdAt' in 'field list'
user表里面没有createdAt字段,默认情况下,Sequelize将添加属性createdAt
和updatedAt
模型,便于查询数据插入和最新更新时间
解决方法有两种:
1)在表中添加createdAt和updatedAt字段
2)在model文件里加上{ timestamps:false } 的配置