sequelize的使用

sequelize的使用

與數(shù)據(jù)庫交互有兩種方法:

使用數(shù)據(jù)庫的原生查詢語言(例如SQL) 使用對象數(shù)據(jù)模型(Object Data Model盐固,簡稱 ODM)或?qū)ο箨P(guān)系模型(Object Relational Model,簡稱 ORM)族跛。 ODM / ORM 能將網(wǎng)站中的數(shù)據(jù)表示為 JavaScript 對象闰挡,然后將它們映射到底層數(shù)據(jù)庫。一些 ORM 只適用某些特定數(shù)據(jù)庫礁哄,還有一些是普遍適用的长酗。 使用 SQL 或其它受到支持的查詢語言才能達到最佳性能。ODM 通常慢一些桐绒,因為在對象和數(shù)據(jù)庫格式之間存在一層用于映射的翻譯代碼夺脾,使它不一定會選用最高性能的數(shù)據(jù)庫查詢(尤其是普遍使用級別的 ODM,它必須在各類數(shù)據(jù)庫功能方面做出更大的折衷)茉继。

使用 ORM 的好處是:程序員可以繼續(xù)用 JavaScript 對象的思維而不用轉(zhuǎn)向數(shù)據(jù)庫語義的思維咧叭。 在(同一個或不同網(wǎng)站)使用不同數(shù)據(jù)庫時尤為明顯。使用 ORM 還可以更方便地對數(shù)據(jù)進行驗證和檢查烁竭。

Sequelize:Sequelize是一款基于Nodejs功能強大的異步ORM框架菲茬。 同時支持PostgreSQL, MySQL, SQLite and MSSQL多種數(shù)據(jù)庫,很適合作為Nodejs后端數(shù)據(jù)庫的存儲接口派撕,為快速開發(fā)Nodejs應(yīng)用奠定扎實婉弹、安全的基礎(chǔ)

本文基于sqlite

SQLite是一個進程內(nèi)的庫,實現(xiàn)了自給自足的终吼、無服務(wù)器的镀赌、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫引擎际跪。它是一個零配置的數(shù)據(jù)庫商佛。

就像其他數(shù)據(jù)庫喉钢,SQLite 引擎不是一個獨立的進程,可以按應(yīng)用程序需求進行靜態(tài)或動態(tài)連接良姆。SQLite 直接訪問其存儲文件肠虽。

安裝sequelize

Sequelize 可通過 npm ( 或 yarn ) 獲得. 中文文檔

npm install sequelize

你還需要手動安裝對應(yīng)的數(shù)據(jù)庫驅(qū)動程序:

# 選擇對應(yīng)的安裝:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

建立連接(sqlite)

要連接到數(shù)據(jù)庫,你必須創(chuàng)建 Sequelize 實例. 這可以通過將連接參數(shù)分別傳遞給 Sequelize 構(gòu)造函數(shù)或傳遞單個連接 URI 來完成:

var path = require('path')
const Sequelize = require("sequelize");

const sequelize = new Sequelize(undefined, undefined, undefined, {
  host: "localhost",
  dialect: "sqlite",
  storage: path.join(__dirname,"../database/database.sqlite") //數(shù)據(jù)存放路徑
});

測試連接

你可以使用 .authenticate() 函數(shù)來測試連接.

// 在model文件下輸入node note.js測試數(shù)據(jù)庫鏈接是否成功

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(屬性,參數(shù)):

const Model = Sequelize.Model;
class User extends Model {}
User.init({
  // 屬性
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING
    // allowNull 默認為 true
  }
}, {
  sequelize,
  modelName: 'user'
  // 參數(shù)
});

另一個是使用 sequelize.define:

const Note = sequelize.define("note", {
  text: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

在內(nèi)部, sequelize.define 調(diào)用 Model.init.

上面的代碼告訴 Sequelize 在數(shù)據(jù)庫中期望一個名為 users 的表,其中包含 firstName 和 lastName 字段.

// 注意:使用{force:true}每次存數(shù)據(jù)前都將刪除之前同名的文件
Note.sync({force:true})
  .then(() => {
    Note.create({
      text: "數(shù)據(jù)庫里的數(shù)據(jù)"
    });
  })

查詢

// 查找所有用戶
// {raw: true} 
User.findAll().then(users => {
  console.log("All users:", JSON.stringify(users, null, 4));
});
// {raw: true}找到的結(jié)果顯示原始數(shù)據(jù),效果類似JSON.stringify
// 創(chuàng)建新用戶
User.create({ firstName: "Jane", lastName: "Doe" }).then(jane => {
  console.log("Jane's auto-generated ID:", jane.id);
});

// 刪除所有名為“Jane”的人
User.destroy({
//使用where查找
  where: {
    firstName: "Jane"
  }
}).then(() => {
  console.log("Done");
});

// 更新數(shù)據(jù), 將所有沒有姓氏的人改為“Doe”
User.update({ lastName: "Doe" }, {
  where: {
    lastName: null
  }
}).then(() => {
  console.log("Done");
});

另外,node.js后臺如何調(diào)試

如果你在編寫Node.js代碼,node-inspector是必備之選歇盼,比Node.js的內(nèi)置調(diào)試器好出許多舔痕。使用起來跟Chrome的javascript調(diào)試器很相似。

使用npm安裝:

npm install node-inspector

然后需要通過瀏覽器連接到node-inspector,需要啟動inspector服務(wù)

node-inspector 

啟動, 默認8080端口

最后以debug模式運行node.js應(yīng)用

node --debug app.js

通過URL http://127.0.0.1:8080/debug?port=5858 就可以進行調(diào)試了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撵溃,一起剝皮案震驚了整個濱河市芋齿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侍匙,老刑警劉巖氮惯,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異想暗,居然都是意外死亡妇汗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門说莫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杨箭,“玉大人,你說我怎么就攤上這事储狭』バ觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵辽狈,是天一觀的道長慈参。 經(jīng)常有香客問我,道長刮萌,這世上最難降的妖魔是什么驮配? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮着茸,結(jié)果婚禮上壮锻,老公的妹妹穿的比我還像新娘。我一直安慰自己元扔,他們只是感情好躯保,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澎语,像睡著了一般途事。 火紅的嫁衣襯著肌膚如雪验懊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天尸变,我揣著相機與錄音义图,去河邊找鬼。 笑死召烂,一個胖子當著我的面吹牛碱工,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奏夫,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怕篷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酗昼?” 一聲冷哼從身側(cè)響起廊谓,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麻削,沒想到半個月后蒸痹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡呛哟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年叠荠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扫责。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榛鼎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出公给,到底是詐尸還是另有隱情借帘,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布淌铐,位于F島的核電站肺然,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腿准。R本人自食惡果不足惜际起,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吐葱。 院中可真熱鬧街望,春花似錦、人聲如沸弟跑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孟辑。三九已至哎甲,卻和暖如春蔫敲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炭玫。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工奈嘿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吞加。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓裙犹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衔憨。 傳聞我的和親對象是個殘疾皇子叶圃,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容