express之Sequelize使用
安装
Sequelize可以通过npm
(或yarn
)安装:
npm install --save sequelize
除安装sequelize
模块外,还需要手工安装你所使用的数据库驱动模块:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
建立连接
要连接到数据库,必须创建一个Sequelize实例。这可以通过将连接参数分别传递到Sequelize构造函数,或通过传递单个连接URI来完成:
const Sequelize = require('sequelize');
// 选项1:分别传入参数
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: /* 'mysql' | 'mariadb' | 'postgres' | 'mssql' 之一 */
});
// 选项1:传入连接URI
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');
测试连接
可以使用.authenticate()
函数测试连接是否正常:
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
对表建模
模型是对Sequelize.Model
类的扩展。模型可以通过两种方式定义。首先,可以通过Sequelize.Model.init(attributes, options)
:
const Model = Sequelize.Model;
class User extends Model {}
User.init({
// attributes
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING
// allowNull defaults to true
}
}, {
sequelize,
modelName: 'user'
// options
});
或者,使用sequelize.define
:
const User = sequelize.define('user', {
// attributes
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING
// allowNull defaults to true
}
}, {
// options
});
模型与数据库同步
如果你想 Sequelize 通过定义的模型自动创建表(或修改已存在的表),可以使用sync
方法,如下所示:
// 注意: `force: true` 选项会在表存在时首先删除表
User.sync({ force: true }).then(() => {
// 现在 `users` 表会与模型定义一致
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
一次同步所有模型
可以使用sequelize.sync()
方法来同步所有模型,而不是调用每个模型的sync()
方法。
查询
以下是一些简单的查询:
// 查询所有 users
User.findAll().then(users => {
console.log("All users:", JSON.stringify(users, null, 4));
});
// 创建一个新 user
User.create({ firstName: "Jane", lastName: "Doe" }).then(jane => {
console.log("Jane's auto-generated ID:", jane.id);
});
// 删除每个名为 "Jane" 的记录
User.destroy({
where: {
firstName: "Jane"
}
}).then(() => {
console.log("Done");
});
// 修改每个`lastName`为`null`的记录修改为"Doe"
User.update({ lastName: "Doe" }, {
where: {
lastName: null
}
}).then(() => {
console.log("Done");
});
评论