使用數據庫時,您可以選擇使用數據庫提供的原語,也可以使用建立在頂部並為您抽像一些小細節的庫。
續集是這些庫之一,它是一個非常流行的Node.js包裝器,用於PostgreSQL的,的MySQL和其他數據庫。
在本文中,我將探討如何使用Sequelize與PostgreSQL數據庫一起使用。
安裝和配置Sequelize
在引擎蓋下,Sequelize使用pg
庫連接到PostgreSQL,所以當我們安裝sequelize
npm包,我們還需要安裝pg
:
npm install pg sequelize
提示:別忘了先跑步
npm init -y
如果項目是全新的,而您沒有package.json
文件已經。
在Node.js文件中,首先定義數據庫訪問變量:
const user = '<postgres user>'
const host = 'localhost'
const database = '<postgres db name>'
const password = '<postgres password>'
const port = '<postgres port>'
然後從導入3個對象sequelize
:
import { Sequelize, Model, DataTypes } from 'sequelize'
然後您可以初始化一個新的Sequelize
使用以下語法的對象實例:
const sequelize = new Sequelize(database, user, password, {
host,
port,
dialect: 'postgres',
logging: false
})
我們告訴Sequelize這是哪種數據庫dialect
屬性(如上所述,它不僅可以處理Postgres)。
我們還禁用日誌記錄,因為它記錄所有SQL查詢時可能非常冗長,而我們實際上並不需要查看它們(除非您正在調試問題)。
如何創建一個Sequelize模型
對於您要使用Sequelize進行處理的每個表,您都可以創建一個模型。
這是一個例子,假設我們有一個dogs
有兩列的表:name
和age
。
我們創建一個Dog
類擴展Model
基類:
import { Sequelize, Model, DataTypes } from 'sequelize'
const class Dog extends Model {}
然後致電init()
類上的靜態方法,描述了其中包含的數據以及我們要應用的規則。在這種情況下,我們禁用null
:
Dog.init({
name: {
type: DataTypes.STRING,
allowNull: false
},
age: {
type: DataTypes.INTEGER,
allowNull: false
}
}, {
sequelize,
modelName: 'dog',
timestamps: false
})
我們用了DataTypes.STRING
和DataTypes.INTEGER
。這DataTypes
對象包含對我們可以使用的所有類型的引用,並且它們映射到每種特定的數據庫類型。查看官方文檔對於更多類型,您可以使用。
如何從數據庫中獲取數據
現在我們有了一個模型,我們如何從表中獲取數據?
我們可以使用findAll()
方法:
Dog.findAll()
調用此方法將返回所有行的列表,我們將其分配給變量:
const results = await Dog.findAll()
我們用
await
因為findAll()
回報承諾
要限制我們檢索的列,請使用attributes
大批:
Dog.findAll({
attributes: ['age']
})
添加一個WHERE
使用的查詢子句where
財產。例如,獲得所有8歲的狗:
Dog.findAll({
where: {
age: 8,
}
})
或讓所有年齡大於5歲的狗:
Dog.findAll({
where: {
age: {
[Op.gte]: 5,
}
}
})
更多屬性可讓您執行其他操作,例如limit
和order
:
Dog.findAll({
limit: 10,
order: [
['name', 'DESC']
]
})
如何將數據插入數據庫
我們可以打電話Dog.create()
傳遞對像以在數據庫中創建新行:
const name = 'Roger'
const age = 8
const result = await Dog.create({ name, age })
如何更新數據
使用update()
更新表中值的方法。
在此示例中,我將“ Roger”的年齡設置為9:
Post.update({
age: 9
}, {
where: {
name: 'Roger'
}
})
卸下where
屬性將更新所有行:
Post.update({
age: 10
})
免費下載我的Node.js手冊
更多節點教程:
- npm軟件包管理器簡介
- Node.js簡介
- 使用Axios的HTTP請求
- 在何處託管Node.js應用
- 使用Node.js與Google Analytics(分析)API進行交互
- npx節點包運行器
- package.json指南
- npm在哪里安裝軟件包?
- 如何更新Node.js
- 如何使用或執行使用npm安裝的軟件包
- package-lock.json文件
- 使用npm的語義版本控制
- 您是否應該將node_modules文件夾提交到Git?
- 將所有Node依賴項更新到最新版本
- 使用Node.js解析JSON
- 查找npm軟件包的安裝版本
- Node.js流
- 安裝較舊版本的npm軟件包
- 在Node中獲取當前文件夾
- 如何在Node中記錄對象
- 使用導出從Node文件公開功能
- 節點和瀏覽器之間的區別
- 使用Node發出HTTP POST請求
- 使用Node獲取HTTP請求主體數據
- 節點緩衝區
- Node.js的簡要歷史
- 如何安裝Node.js
- 使用Node您需要知道多少JavaScript?
- 如何使用Node.js REPL
- 節點,從命令行接受參數
- 使用Node輸出到命令行
- 接受來自Node中命令行的輸入
- 使用`npm uninstall`來卸載npm軟件包。
- npm全局或本地軟件包
- npm依賴項和devDependencies
- Node.js事件循環
- 了解process.nextTick()
- 了解setImmediate()
- 節點事件發射器
- 建立一個HTTP服務器
- 使用Node發出HTTP請求
- Node fs模塊
- 使用Axios的Node中的HTTP請求
- 使用Node讀取文件
- 節點文件路徑
- 用Node寫入文件
- 節點文件統計
- 在Node中使用文件描述符
- 在Node中使用文件夾
- 節點路徑模塊
- Node http模塊
- 將WebSockets與Node.js結合使用
- 使用MySQL和Node的基礎知識
- Node.js中的錯誤處理
- 哈巴狗指南
- 如何從Node.js讀取環境變量
- 如何從Node.js程序退出
- Node os模塊
- 節點事件模塊
- 節點,開發與生產之間的區別
- 如何檢查Node.js中是否存在文件
- 如何在Node.js中創建一個空文件
- 如何使用Node.js刪除文件
- 如何使用Node.js獲取文件的最後更新日期
- 如何在JavaScript中確定日期是否為今天
- 如何將JSON對象寫入Node.js中的文件
- 為什麼要在下一個項目中使用Node.js?
- 從任何文件夾運行Web服務器
- 如何將MongoDB與Node.js結合使用
- 使用Chrome DevTools調試Node.js應用
- 什麼是pnpm?
- Node.js運行時v8選項列表
- 使用npm時如何解決“缺少寫訪問權限”錯誤
- 如何在Node.js中啟用ES模塊
- 如何使用Node.js生成子進程
- 如何在Express中同時獲取已解析的正文和原始正文
- 如何在Node.js中處理文件上傳
- 節點模塊中的對等依賴性是什麼?
- 如何使用Node.js編寫CSV文件
- 如何使用Node.js讀取CSV文件
- 節點核心模塊
- 使用Node.js一次增加多個文件夾的數量
- 如何將畫布打印到數據URL
- 如何使用Node.js和Canvas創建和保存圖像
- 如何使用Node.js下載圖像
- 如何在Node.js中批量重命名文件
- 如何獲取Node中文件夾中所有文件的名稱
- 如何使用Promise和基於Node.js回調的等待功能
- 如何在本地測試NPM軟件包
- 如何在運行時檢查當前的Node.js版本
- 如何使用Sequelize與PostgreSQL交互
- 使用Node.js服務HTML頁面
- 如何解決Node.js中的util.pump不是函數錯誤