此係列文章的應用示例已發佈於 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 上查看如何執行特定查詢,如 WHERE
和 JSONB
。api
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 });
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 支持, 謝謝.