官網地址:Sequelizehtml
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.node
ORM: 對象關係映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping)mysql
我的理解:sequelize能夠創建與數據庫中表造成關係數據映射的模型,而後使用自身提供的api來操做模型,從而操做數據庫中的表。sql
1、安裝數據庫
一、使用npm安裝npm
前提:須要安裝nodeapi
npm install --save sequelizepromise
npm install --save mysql2 app
我用的數據庫是mysql,能夠根據須要進行安裝ui
二、使用yarn安裝
前提:須要安裝yarn
yarn add sequelize
yarn add mysql2
2、配置
var Sequelize = require("Sequelize"); const sequelize = new Sequelize('數據庫', '用戶名', '密碼', { host: 'localhost', port:'3306', dialect: 'mysql', timezone : "+08:00", }); exports.sequelize = sequelize;
上面是鏈接數據庫的一個簡單配置,其餘配置能夠查看官方文檔
3、定義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 說明
4、數據查詢操做
var User = require('../models/User.js').User; User.findAll().then(user => { console.log(user); })
我在user表裏插入了一行數據,查詢結果打印以下:
5、錯誤整理
一、找不到表:Table 'experiment_car.users' doesn't exist
個人表名user,查詢時默認加"s",變成了「users」
解決方法:在model文件里加上{ freezeTableName:true }的 配置,sequelize就不會在附加「s」字符
參考:sequelize for Node.js : ER_NO_SUCH_TABLE
二、找不到字段:Unknown column 'createdAt' in 'field list'
user表裏面沒有createdAt字段,默認狀況下,Sequelize將添加屬性createdAt
和updatedAt
模型,便於查詢數據插入和最新更新時間
解決方法有兩種:
1)在表中添加createdAt和updatedAt字段
2)在model文件里加上{ timestamps:false } 的配置