跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 不喜欢使用 orm 框架,分享一个自己写 postgresql 的 sql 构造库
未分類
24 2 月 2021

不喜欢使用 orm 框架,分享一个自己写 postgresql 的 sql 构造库

不喜欢使用 orm 框架,分享一个自己写 postgresql 的 sql 构造库

資深大佬 : KouShuiYu 1

GitHub 地址

API 文档暂时还没有,下面是使用的 demo

pg-helper

use node-postgres easier

Examples

const {PgHelper} = require('@c_kai/pg-helper');  // detail https://node-postgres.com/api/pool const pgHelper = new PgHelper({     host,     user,     password,     database,     port: 5432,     max: 20,     idleTimeoutMillis: 30000,     connectionTimeoutMillis: 2000, }); 

insert

const result = await pgHelper.insert([{   percentage: 0,   type: 'public',   params: {},   created_by: 1,   status: 'created',   job_uuid: '103', },{   percentage: 0,   type: 'public',   params: {},   created_by: 1,   status: 'created',   job_uuid: '104', }], {   tableName: 'jobs',   returning: true, }); 

delete

const result = await pgHelper.delete({}, {   tableName: 'jobs',   transaction, }); 

update

const result = await pgHelper.update({   type: 'pravate',   status: 'gg', }, {   update: ['type', 'status'],   tableName: 'jobs',   returning: ['id'],   transaction, }); 

select

const result = await pgHelper.select({   percentage: 0, }, {   where: {     percentage: '= {percentage}'     or: {       id: '=1',     }   },   schemaName: 'public',   tableName: 'jobs',   autoHump: false,   count: true, }); 

Run sql

await pgHelper.runSql('select now()');  // with params await pgHelper.runSql('select power({a}, {b})', { a: 2, b: 4 }); 

Run sql use transaction

await pgHelper.runTSql([     {         sql: 'select now()',     },     {         sql: 'select power({a}, {b})',         params: { a: 2, b: 4}     } ]) 

OR

let transaction; try {   transaction = await pgHelper.getTransaction();   let result4 = await pgHelper.runSql('select {str1} || {str2}', {     str1: 'xiao',     str2: 'hong',   }, {     transaction,   });   transaction.commit();    console.log(result4) } catch (error) {   transaction.rollback(); } 

大佬有話說 (18)

  • 資深大佬 : bleepbloop

    看了一下,好像不能防注入?

  • 主 資深大佬 : KouShuiYu

    @bleepbloop 可以防止注入 sql 中的{params}会被替换为$n 的形式

  • 主 資深大佬 : KouShuiYu

    补一个 npm 地址[https://www.npmjs.com/package/@c_kai/pg-helper]( https://www.npmjs.com/package/@c_kai/pg-helper)

  • 主 資深大佬 : KouShuiYu

    官方提供的这种方式感觉太不好用了
    “`js
    const query = {
    text: ‘INSERT INTO users(name, email) VALUES($1, $2)’,
    values: [‘brianc’, ‘[email protected]’],
    }

    “`

    我改成了这种形式
    “`
    const query = {
    text: ‘INSERT INTO users(name, email) VALUES({name}, {email})’,
    values: { name: ‘brianc’, email: ‘[email protected]’]
    }
    “

  • 主 資深大佬 : KouShuiYu

    官方提供的这种方式感觉太不好用了
    “`js
    const query = {
    text: ‘INSERT INTO users(name, email) VALUES($1, $2)’,
    values: [‘brianc’, ‘[email protected]’],
    }

    “`

    我改成了这种形式
    “`js
    const query = {
    text: ‘INSERT INTO users(name, email) VALUES({name}, {email})’,
    values: { name: ‘brianc’, email: ‘[email protected]’]
    }
    “`

  • 主 資深大佬 : KouShuiYu

    额,好像不支持代码块

  • 資深大佬 : fucUup

    js 读写数据库?????

    小心清库跑路

  • 資深大佬 : KiseXu

    @fucUup 这个节点是 Node.js

  • 資深大佬 : fucUup

    @KiseXu 跟语言无关, 我是吐槽你的交付物, 用起来很容易犯错的, 这样就不好, 一定要用核电站的思维写代码, 把容易犯错的设计砍掉

  • 資深大佬 : fucUup

    这种交付物, 接近裸写 sql, 不仅分库分表 一旦表动难维护, 还有容易清库跑路嫌疑

  • 資深大佬 : RockShake

    做小项目没问题的,主说了这是 ORM 的替代方案

  • 資深大佬 : 0clickjacking0

    orm 是真的可以杜绝 sql 注入的

  • 資深大佬 : xieren58

    knexjs 不好用吗?

  • 主 資深大佬 : KouShuiYu

    @xieren58 这个用起来比较简单,对照的是 https://github.com/felixfbecker/node-sql-template-strings,我又加上了方便单表 CURD 的四个方法

  • 資深大佬 : ERRASYNCTYPE

    哈哈哈哈跟我自己做的一个好像,不过我用 gt gte lt lte 这些 mongodb 的保留词来做 where 构造

  • 主 資深大佬 : KouShuiYu

    @ERRASYNCTYPE 考虑到 where 表达式情况太复杂了,还要额外加好多接口,所以就放开了

  • 資深大佬 : ERRASYNCTYPE

    @KouShuiYu 确实,还有 or between 什么的要处理,所以我都是自己根据自己业务去个别调整来着,不完备

  • 資深大佬 : felixin

    看一下 slonik

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具