點燈坊

失くすものさえない今が強くなるチャンスよ

對 PostgreSQL 刪除資料

Sam Xiao's Avatar 2021-10-25

可將 DELETE Statement 直接傳入 Node-postgres,並且支援 Parameter 方式避免湊字串而造成 SQL Injection。

Version

Node 14.18.1
Node-postgres 8.7.1

Add Library

$ yarn add pg

pg:安裝 Node-postgres 連接 PostgreSQL。

DELETE

import PG from 'pg'

let { Pool } = PG

let pg = new Pool ({
  host: 'localhost',
  port: 5432,
  user: 'admin',
  password: '12345',
  database: 'KnexLab'
})

let { rows } = await pg.query (`
  DELETE FROM articles
  WHERE id = $1 
  RETURNING *
`, [10])
console.log (rows)

第 5 行

let pg = new Pool ({
  host: 'localhost',
  port: 5432,
  user: 'admin',
  password: '12345',
  database: 'KnexLab'
})

使用 Node-postgres 連接 PostgreSQL:

  • host:設定 host
  • port:設定 port
  • user:設定 id
  • password:設定 password
  • database:設定連接 database

13 行

let { rows } = await pg.query (`
  DELETE FROM articles
  WHERE id = $1 
  RETURNING *
`, [10])
  • DELETE 傳入 db.query
  • DELETE 的 parameter 從 $1 開始非 $0,會將 id 分配給 $1
  • DELETE 內加入 RETURNING * 回傳所有刪除資料,包含 id
  • pg.query 回傳為 Promise,使用 top level await 處理
  • 使用 Object Destructure 抽出 rows 才是實際回傳 Array

delete000

Conclusion

  • DELETE 一樣如 SELECT 傳入 pg.query 即可
  • pg.query 支援 Promise,因此可使用 Promise Chain 或 Async Await 處理皆可

Reference

Node-postgres, Queries