快速入门

安装

Sequelize 可以通过 NPM 或者 Yarn 直接安装:

使用 NPM 安装

// 安装 sequelize
npm install --save sequelize

// 安装以下的任何一种
npm install --save pg pg-hstore
npm install --save mysql2
npm install --save sqlite3
npm install --save tedious

使用 Yarn 安装

// 安装 sequelize
yarn add sequlize

// 安装以下的任何一种
yarn add pg pg-hstore
yarn add mysql2
yarn add sqlite3
yarn add tedious

设置一个连接

Sequelize 会在初始化时,配置一个连接池,所以,如果你只从单进程中连接数据库,理想情况下,最好是一个数据库只对应一个实例。但如果你需要从多个进程中连接数据库,那么最好为每一个进程创建一个连接实例,由于每一个实例都有最大连接数限制,如果 3 个进程需要有90个连接的话,那么每一个实例的最大连接数限制为至少 30.

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhsot',
  dialect: 'mysql',  // or 'sqlite' , 'postgres' , 'mssql'

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

  // SQLite only
  storage: 'path/to/database.sqlite'
})

// 或者你也可以使用更简单的连接URI地址:
const sequelize = new Sequelize('postgress://user:[email protected]:5432/dbname')

更多详细的设置选项,你可以查看 API 文档

测试连接

你可以使用 .authenticate() 函数测试连接是否正确。

sequelize
  .authenticate()
  .then(() => {
    console.log('连接已创建成功。')
  })
  .catch(error => {
    console.error('连接数据库失败:', error)
  })

创建第一个模型

模型通过 sequelize.define('name', { ...attributes }, { ...options }) 定义。

const User = sequlieze.define('user', {
  firstName: {
    type: Sequelize.STRING
  },
  lastName: {
    type: Sequelize.STRING
  }
})

// 如果设置 force 为 `true`,则会强制删除已经成功的同名数据表
User.sync({force: true})
  .then(() => {
    // 数据表已创建
    return User.create({
      firstName: '韬',
      lastName: '潘'
    })
  })

API 文档 中,你可以查看更多关于创建模型的说明。

第一个查询

User.findAll().then(users => {
  console.log(users)
})

查询 章节,你可以查看更多详细内容。

应用级模型选项

Sequelize 构造函数中的,接受一个名为 define 的参数,该参数定义的字段会在所有已创建的模型中默认启用。

const sequelize = new Sequelize('connectionUri', {
  define: {
    timestamps: false // 默认为 true
  }
})

const User = sequelize.define('user', {})
const Post = sequelize.define('post, {
  timestamps: true // 现在 post 模型将有 timestamps
})

承诺(Promise)

Sequelize 使用 Promise 控制异步控制流,如果你对 Promise 还不太了解,可以通过 这里 以及 这里 了解它。

简单来讲,一个Promise就是再向你承诺 —— “我会在有结果的时候,准时告诉你,或者在有错误发生的时候,告诉你发生了什么错误”。

// 不要像下面这样
const user = User.findOne()

console.log(user.get('firstName'))

上面这样的代码是完全不会成功执行的, 因为, user 是一个 promise object,并不是一个从数据库中查询出来的数据对象,正确的方法是下面这样的:

User.findOne().then(user => {
  console.log(user.get('firstName'))
})

如果你的运行环境支持 asyncawait,那么,在一个 async 函数中,下面这样也是可以正常执行的:

user = await User.findOne()
console.log(user.get('firstName'))

在你了解了什么是 Promise 之后,推荐你从 bluebird API 接口文档 去了解更多知识。

results matching ""

    No results matching ""