日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sequelize 增加数据库字段_Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)...

發(fā)布時間:2023/12/13 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sequelize 增加数据库字段_Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Sequelize 是一個基于 Promise 的 Node.js ORM,目前支持 Postgres、MySQL、SQLite 和 Microsoft SQL Server。它具有強大的事務支持,關(guān)聯(lián)關(guān)系、讀取和復制等功能。

所謂ORM是指對象關(guān)系映射,通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將面向?qū)ο笳Z言程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式

以下以使用mysql數(shù)據(jù)庫作為案例

為了演示,首先新建文件夾初始化項目

$ mkdir sequelizeTest // 新建文件夾

$ cd sequelizeTest // 進入文件夾

$ npm init --yes // 初始化項目

1. 安裝

// Using NPM

$ npm install --save sequelize

// 使用哪種數(shù)據(jù)庫選擇不同的安裝

$ npm install --save mysql2

$ npm install --save pg pg-hstore # Postgres

$ npm install --save mariadb

$ npm install --save sqlite3

$ npm install --save tedious # Microsoft SQL Server

我這里安裝mysql2

2.數(shù)據(jù)庫連接測試

在項目文件夾下新建一個index.js

(async function() {

const Sequelize = require('sequelize');

// 第一個參數(shù)是數(shù)據(jù)庫名,第二個參數(shù)是數(shù)據(jù)庫用戶名,第三個參數(shù)密碼

// 第四個參數(shù)配置參數(shù) 包括地址,數(shù)據(jù)庫類型等

const sequelize = new Sequelize('list', 'root', '123456', {

host: 'localhost',

dialect: 'mysql'

});

// 測試是否連接函數(shù)

sequelize.authenticate()

.then(() => {

console.log('連接成功');

console.log("hello");

})

.catch(err => {

console.log(err);

})

})()

使用nodemon 作為熱更新啟動,這樣就不用每次重啟了

$ npm install nodemon -g

啟動項目

$ nodemon index

顯示如下,說明已成功

3.定義模型

用來表述(描述)數(shù)據(jù)庫表字段信息的對象,每一個模型對象表示數(shù)據(jù)庫中的一個表,后續(xù)對數(shù)據(jù)庫的操作都是通過對應的模型對象來完成的

modelName:模型名稱,自定義

attributes:模型中包含都數(shù)據(jù),每一個數(shù)據(jù)映射對應表中都每一個字段

options:模型(表)的設(shè)置

attributes:字段值描述:

type:字段類型,String|DataTypes

allowNull:是否允許為空,默認為true

defaultValue:默認值,默認為null

unique:值唯一,默認為false

primaryKey:是否為主鍵,默認為false

options:模型(表)的設(shè)置

timestamps:是否給每條記錄添加 createdAt 和 updatedAt 字段,并在添加新數(shù)據(jù)和更新數(shù)據(jù)的時候自動設(shè)置這兩個字段的值,默認為true

paranoid:設(shè)置 deletedAt 字段,當刪除一條記錄的時候,并不是真的銷毀記錄,而是通過該字段來標示,即保留數(shù)據(jù),進行假刪除,默認為false

freezeTableName:禁用修改表名; 默認情況下,sequelize將自動將所有傳遞的模型名稱(define的第一個參數(shù))轉(zhuǎn)換為復數(shù)。 默認為false

tableName:手動設(shè)置表的實際名稱

定義表索引? ? indexes:Array

每個索引對象可以設(shè)置的值

name:索引名稱,默認模型名稱+字段

fields: Array,索引字段

unique:唯一索引,默認false

創(chuàng)建模型實例對象

一個模型類對應一個表,一個模型實例對象就是一條對應的表記錄,通過操作這個對象來關(guān)聯(lián)操作對應的表中的數(shù)據(jù),操作模型類就是操作表,操作模型類對象就是操作該表中的某條記錄 ?? ??? ?模型類 - 表 ?? ??? ?模型實例 - 記錄

舉例:

新建數(shù)據(jù)庫list,新建一個users表 數(shù)據(jù)結(jié)構(gòu)如下:

定義模型

(async function() {

const Sequelize = require('sequelize');

const sequelize = new Sequelize('list', 'root', '123456', {

host: 'localhost',

dialect: 'mysql'

});

const UsersModel = await sequelize.define('Users', {

id: {

allowNull: false,

autoIncrement: true,

primaryKey: true,

type: Sequelize.INTEGER

},

username: {

type: Sequelize.STRING(20),

allowNull: false

},

password: {

type: Sequelize.CHAR(32),

allowNull: false

},

createdAt: {

allowNull: false,

type: Sequelize.DATE

},

updatedAt: {

allowNull: false,

type: Sequelize.DATE

}

}, {

tableName: 'users'

});

// UsersModel

// let user = UsersModel.build({

// username: "swnd",

// password: "q11111"

// });

// user = await user.save();

// console.log(user.get({'id': 3}));

})()

4. 單表的增刪改

方式一:調(diào)用 build 方法后對象只存在于內(nèi)存中,需要進一步調(diào)用 save 方法才會保存到數(shù)據(jù)庫中。

let user = UsersModel.build({

username: "swnd",

password: "q11111"

});

user = await user.save();

console.log(user.get({'id': 3}));

以上代碼運行后,終端將會輸出以下信息:

方式二:調(diào)用 create 方法后,會直接保存到數(shù)據(jù)庫中。

const user = UsersModel.create({

username: 'zhangsan',

password: '123456'

})

console.log(user.get({'id': 6}));

方案一

const hasUser = await UsersModel.findOne({

where: {

id: 6,

username: 'zhangsan'

}

});

hasUser.username = 'wanggangdan'

hasUser.save();

方案二

const hasUser = await UsersModel.findOne({

where: {

id: 6

}

});

const updatedUser = await hasUser.update({

username: "green"

});

hasUser.save();

限制更新某字段

// 方案一

const hasUser = await UsersModel.findOne({

where: {

id: 6

}

});

const updatedUser = await hasUser.update({

username: "green2",

password: '8888888888'

},{

fields: ['username'] // 只允許更新這個

});

// 方案二

const hasUser = await UsersModel.findOne({

where: {

id: 6

}

});

hasUser.username = 'wanggangdan'

hasUser.passwprd = '8989878888'

hasUser.save({ fields: ['username'] }); // 只允許更新這個

const hasUser = await UsersModel.findOne({

where: {

id: 3

}

});

await hasUser.destroy();

如果我們啟用了 paranoid(偏執(zhí))模式,destroy 的時候不會執(zhí)行 DELETE 語句,而是執(zhí)行一個 UPDATE 語句將 deletedAt 字段設(shè)置為當前時間(一開始此字段值為NULL)。不過需要注意的是,僅當 timestamps=true 為 true 時,paranoid 模式才能生效。

未完待續(xù)

本篇測試代碼

(async function() {

const Sequelize = require('sequelize');

const sequelize = new Sequelize('list', 'root', '123456', {

host: 'localhost',

dialect: 'mysql'

});

const UsersModel = await sequelize.define('Users', {

id: {

allowNull: false,

autoIncrement: true,

primaryKey: true,

type: Sequelize.INTEGER

},

username: {

type: Sequelize.STRING(20),

allowNull: false

},

password: {

type: Sequelize.CHAR(32),

allowNull: false

},

createdAt: {

allowNull: false,

type: Sequelize.DATE

},

updatedAt: {

allowNull: false,

type: Sequelize.DATE

}

}, {

tableName: 'users'

});

// 增

// 方式一

// let user = UsersModel.build({

// username: "swnd",

// password: "q11111"

// });

// user = await user.save();

// console.log(user.get({'id': 3}));

// 方式二

// const user = UsersModel.build({

// username: 'zhangsan2',

// password: '123456'

// })

// console.log(user.get({'id': 6}));

// 改

const hasUser = await UsersModel.findOne({

where: {

id: 3

}

});

// hasUser.username = 'wanggangdan'

// hasUser.passwprd = '8989878888'

// hasUser.save({ fields: ['username'] }); // 只允許更新這個

// const updatedUser = await hasUser.update({

// username: "green2",

// password: '8888888888'

// },{

// fields: ['username'] // 只允許更新這個

// });

await hasUser.destroy();

})()

總結(jié)

以上是生活随笔為你收集整理的sequelize 增加数据库字段_Node项目使用Sequelize操作数据库(一)(包括模型,增,删、改等)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。