Sequelize 中文文檔 v4 - Getting started - 入門

Getting started - 入門

此係列文章的應用示例已發佈於 GitHub: sequelize-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.html

安裝

Sequelize 可經過 NPM 和 Yarn 得到。mysql

// 使用 NPM
$ npm install --save sequelize

# 還有如下之一:
$ npm install --save pg pg-hstore
$ npm install --save mysql2
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL

// 使用 Yarn
$ yarn add sequelize

# 還有如下之一:
$ yarn add pg pg-hstore
$ yarn add mysql2
$ yarn add sqlite3
$ yarn add tedious // MSSQL

創建鏈接

Sequelize將在初始化時設置鏈接池,因此若是從單個進程鏈接到數據庫,你最好每一個數據庫只建立一個實例。 若是要從多個進程鏈接到數據庫,則必須爲每一個進程建立一個實例,但每一個實例應具備「最大鏈接池大小除以實例數」的最大鏈接池大小。 所以,若是您但願最大鏈接池大小爲90,而且有3個工做進程,則每一個進程的實例應具備30的最大鏈接池大小。git

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'|'sqlite'|'postgres'|'mssql',

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

  // 僅限 SQLite
  storage: 'path/to/database.sqlite'
});

// 或者你能夠簡單地使用 uri 鏈接
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');

Sequelize 構造函數能夠經過 API reference 得到一整套可用的參數。github

測試鏈接

您可使用 .authenticate() 函數來測試鏈接。sql

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

你的第一個模型

模型使用 sequelize.define('name', {attributes}, {options}) 來定義.數據庫

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

// force: true 若是表已經存在,將會丟棄表
User.sync({force: true}).then(() => {
  // 表已建立
  return User.create({
    firstName: 'John',
    lastName: 'Hancock'
  });
});

您能夠在 Model API reference 中閱讀更多關於建立模型的信息。npm

你的第一個查詢

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

您能夠在 Data retrieval 上查看更多關於模型的查找器功能,如 .findAll() 。或者在 Querying 上查看如何執行特定查詢,如 WHEREJSONBapi

應用全局的模型參數

Sequelize 構造函數使用 define 參數,該參數將用做全部定義模型的默認參數。promise

const sequelize = new Sequelize('connectionUri', {
  define: {
    timestamps: false // 默認爲 true
  }
});

const User = sequelize.define('user', {}); // 時間戳默認爲 false
const Post = sequelize.define('post', {}, {
  timestamps: true // 時間戳此時爲 false
});

Promise

Sequelize 使用 promise 來控制異步控制流程。 若是你不熟悉 promise 是如何工做的,別擔憂,你能夠在這裏閱讀 這裏這裏bash

基本上,一個 promise 表明了某個時候會出現的值 - 這意味着「我保證你會在某個時候給你一個結果或一個錯誤」。

// 不要這樣作
user = User.findOne()

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

_這將永遠不可用!_這是由於user是 promise 對象,而不是數據庫中的數據行。 正確的方法是:

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

當您的環境或解釋器支持 async/await 時,這將可用,但只能在 async 方法體中:

user = await User.findOne()

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

一旦知道了什麼是 promise 以及它們的工做原理,請使用 bluebird API reference 做爲轉移工具。 尤爲是,你可能會使用不少 .all

若是這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: sequelize-docs-Zh-CN 支持, 謝謝.

相關文章
相關標籤/搜索