建立连接
sequelize会在初始化时设置一个连接池,为每个数据库创建实例。
var sequelize = new Sequelize('database','username','password',){
host : 'localhost',
dialect : 'mysql' | 'mariadb' | 'sqlite' | 'postgres' | 'mssql',
pool:{
max : 5 ,
min : 0 ,
idle : 10000
},
storage : 'path/to/database.sqlite' //仅sqlite适用
});
//或者使用l一个连接uri
var sequelize = new Sequelize ('postgress://user:pass@example.com:5432/dbname');
model定义
model引用格式:sequelize.define('name',{attributes},{options}):
var User = sequelize.define('user', { firstName: { type: Sequelize.STRING, field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database }, lastName: { type: Sequelize.STRING } }, { freezeTableName: true // Model 对应的表名将与model名相同 }); User.sync({force: true}).then(function () { // 已创建数据表 return User.create({ firstName: 'John', lastName: 'Hancock' }); });
Promise
Sequelize 基于Promise实现异步流程控制,但其使用的并不是ECMAScript 6中规定的标准Promise对象,而是使用bluebird,这个模块是对原生Promise的一个扩展。
Sequelize类
- new Sequelize实例
new Sequelize (database,[username=null],[password=null],[option={}]) 数据库名、用户名、密码、一个可选的options对象参数
var Sequelize = require('sequelize'); require被引用后,会指向Sequelize的主类和构造函数
var sequelize = new Sequelize(database,[username=null],[password=null],[option={}]) 引用后就可以通过关键字new实例化,实例化后就会以连接池的形式连接到所使用的数据库
实例化参数
名称 | 类型 | 说明 |
---|---|---|
database | String | 数据库名 |
[username=null] | String | 数据库用户名 |
[password=null] | String | 数据库密码 |
[options={}] | Object | 参数对象 |
[options.dialect='mysql'] | String | 要连接的数据库类型 可选值有:mysql、postgres、sqlite、mariadb、mssql |
[options.dialectModulePath=null] | String | 指定路径模块添加数据连接 |
[options.dialectOptions] | Object | 路径模块所使用的扩展选项 |
[options.storage] | String | 仅用于sqlite,默认为:‘memory:' |
[option.host='localhost'] | String | 连接数据库的主机 |
[option.port=] | String | 连接数据库的端口 |
[options.protocol='tcp'] | String | 连接数据库使用的协议 |
[options.define={}] | Object | 定义模型的选项,默认为'sequelize.define'选项 |
[options.query={}] | Object | 'sequelize.query'的默认选项 |
[options.set={}] | Object | 'sequelize.set'的默认选项 |
[options.sync] | Object | 'squelize.sync'的默认选项 |
[options.timezone='+00:00'] | String | 时间转换时从数据库得到javascript的时间,这个时区将应用于服务器的NOW、CURRENT_TIMESTAMP或其他时间函数 |
[options.logging]=console.log] | Function | 用于sequelize日志打印的函数 |
[options.omitNull=false] | Boolean | null值是否通过SQL查询 |
[options.native=false] | Boolean | 是否使用本地库,仅用于postgres[ |
[options.replication=false] | Boolean | 是否使用读写分离 要启用读/写复制,需要传递一个对象,这个对象有read、write两个属性.write是一个单一的对象(由单台服务器处理写入),而read、write两个属性,write是一个包含对象的数组(由多台服务器处理读取)。每台read、write服务器都可以包含以下属性:host、port、username、password、database。 |
[options.pool={}] | Object | 使用连接池连接,默认为true |
[options.pool.maxConnections] | Integer | |
[options.pool.minConnections] | Integer | |
[options.pool.maxIdleTime] | Integer | 连接最大空闲置时间(毫秒),超时后将释放连接。 |
[options.pool.validateConnection] | Function | 连接验证函数 |
[options.quoteIdentifiers=true.] | Boolean | 设置为fasle时Postgres中会使表名和属性大小不敏感,并跳过双引号。 |
[options.transcationType='DEFERRED''] | String | 设置事务类型,详见Sequelize.Transcation.TYPES,仅Sqlite适用 |
[options.isolationLevel='REPEATABLE_READ'] | String | 设置事件的隔离级别 |
[options.retry] | Object | 设置自动查询时的重试标志 |
[options.retry.match] | Array | 匹配到指定的错误字符串之一后重试查询 |
[options.retry.max] | Integer | 设置重试次数 |
[options.typeValidation=false] | Boolean | 在插入、更新等操作时执行类型验证 |
[options.benchmark=false] | Boolean | 在打印执行sql日子时输出执行时间(毫秒) |
S
- Sequelize实例化示例
- var sequelize = new Sequelize ('database','username') 不使用密码和选项
- var sequelize = new Sequelize ('database','username','password') 不使用选项
- var sequelize = new Sequelize ('databse','username',null,{})不使用密码/空密码
- var sequelize = new Sequelize ('my_database','john','doe',{})使用密码和选项
- 通过URI实例化:
new Sequelize(uri,[options={}])
var sequelize = new Sequelize('mysql://localhost:3306/database',{})
- sequelize.models实例中已定义的模型
sequelize.models;
{
User : User ,
UserRole :UserRole,
...
}
- sequelize.define()模型定义
sequelize.define(modelname,attributes,[options])-》Model
该实例方法用于定义一个新的Model(模型),Model相当于数据库中的表,该对象不能通过构造函数实例化,而只能通过sequelize.define()或sequelize.import()方法创建。
attributes相当于表的字段
sequelize.define('modelName',{
columnA:{
type:Sequelize.800LEAN,
validate:{
}
}
})