安装
// Using NPM
$ npm install --save sequelize
# And one of the following:
$ npm install --save pg pg-hstore
$ npm install --save mysql2
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL
// Using Yarn
$ yarn add sequelize
# And one of the following:
$ yarn add pg pg-hstore
$ yarn add mysql2
$ yarn add sqlite3
$ yarn add tedious // MSSQL
我在使用时安装了sequelize和mysql,现个版本分别为:"mysql": "^2.13.0", "sequelize": "^3.30.4"
使用
1. 连接数据库,生成Sequelize实例
sequelize提供了两种方式来实现数据库的链接
方法一:
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'|'sqlite'|'postgres'|'mssql',
pool: {
max: 5,
min: 0,
idle: 10000
},
// SQLite only
storage: 'path/to/database.sqlite'
});
方法二:
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname')
2. 定义模型,告诉Sequelize如何映射数据库
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
},{
timestamps: false,
tableName:'mohe_user'
});
用sequelize.define()定义Model时,传入名称user,默认的表名就是users。第二个参数指定列名和数据类型,如果是主键,需要更详细地指定。第三个参数是额外的配置,我们传入{ timestamps: false }
是为了关闭Sequelize的自动添加timestamp的功能。所有的ORM框架都有一种很不好的风气,总是自作聪明地加上所谓“自动化”的功能,但是会让人感到完全摸不着头脑。tableName用来指定数据库表的名称,覆盖默认表名。
3. 调用模型方法,操作数据库
第一步:访问MySQL,创建数据库表
执行mysql -u root -p
输入口令后连接MySQL服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
查看数据库
use test;
create table mohe_user (
id varchar(50) not null,
name varchar(100) not null,
gender bool not null,
birth varchar(10) not null,
createdAt bigint not null,
updatedAt bigint not null,
version bigint not null,
primary key (id)
) engine=innodb;
在数据库test中,创建mohe_user表
第二步,调用创建的user模型往mohe_user表中添加数据
var now = Date.now();
user.create({
id: 'g-' + now,
name: 'Gaffey',
gender: false,
birth: '2007-07-07',
createdAt: now,
updatedAt: now,
version: 0
}).then(function (p) {
console.log('created.' + JSON.stringify(p));
}).catch(function (err) {
console.log('failed: ' + err);
});
调用成功后效果如图: