<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Postgre-SQLPostgreSQL 數(shù)據(jù)庫操作庫

          聯(lián)合創(chuàng)作 · 2023-09-30 23:24

          Postgre-SQL

          一個用于node.js上的,基于pg/pg-native/pg-pool的一個PostgreSQL數(shù)據(jù)庫操作庫。

          設(shè)計(jì)目標(biāo)是:用更少的代碼,寫出更直觀的(復(fù)雜)查詢。

          比如:

          • * await db.table(table).add(data). 在insert into 之后,自動檢測是否有主鍵,主鍵是否是序列,如果是,返回ID。否則返回影響的行數(shù)。如果`table`表中有`create_at`字段,會自動填充`NOW()`。

          • * await db.table(table).where(condition).find(). 自動在SQL中追加`limit 1`,并返回rows[0]或null。

          • * await db.table(table).where(condition).getField(field). 自動在SQL中追加`limit 1`,并返回rows[0][field]或null。

          使用類似ThinkPHP的語法,去操作PostgreSQL數(shù)據(jù)庫。

          > 可來這里https://runkit.com/blusewang/postgre-sql-play先過手癮。

          庫本身已經(jīng)包含了連接池功能。所以可以直接連接PostgreSQL不必經(jīng)過pgbouncer。

          可以在業(yè)務(wù)里按需要在三個不同的級別自由切換。更靈活更高效。

          有了連接池可以很好的避免因?yàn)閚ode.js過載產(chǎn)生的連鎖反應(yīng),波及到PostgreSQL數(shù)據(jù)庫。

          安裝

          npm i postgre-sql

          配置

          const {connect} = require('postgre-sql');
          connect({user:'postgres',database:'test',max:2,idleTimeoutMillis:100});

          使用DEMO

          const {client} = require('postgre-sql');
          let db = new client();
          (async ()=>{
              try{
                  let res = await db.table('public.users')
                      .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
                      .field('uid,user_name').order('uid desc').page(2).select();
                      // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
              }catch (e){
                  // something else
              }
              try{
                  await db.begin();
                  let new_uid = await db.table('public.users').add({user_name:'charles'});
                  await db.commit();
              }catch (e){
                  db.rollback();
              }
              
          })();

          會話模式

          默認(rèn)是statement模式,這個模式的語句會平均負(fù)載到池中所有的連接。適合并行查詢!

          會話模式會根據(jù)業(yè)務(wù)自動調(diào)整。

          語句模式 statement

          const {client} = require('postgre-sql');
          let db = new client();
          (async ()=>{
              try{
                  let res = await db.table('public.users')
                      .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
                      .field('uid,user_name').order('uid desc').page(2).select();
                      // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
              }catch (e){
                  // something else
              }
          })();

          會話模式 session

          const {client} = require('postgre-sql');
          let db = new client();
          (async ()=>{
              try{
                  await db.connect();
                  let res = await db.table('public.users')
                      .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
                      .field('uid,user_name').order('uid desc').page(2).select();
                      // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
                  await db.release(); // Attention! if connection a session don't forget release it!
              }catch (e){
                  await db.release(); // Attention! if connection a session don't forget release it!
                  // something else
              }
          })();

          事務(wù)模式 transaction

          const {client} = require('postgre-sql');
          let db = new client();
          (async ()=>{
              try{
                  await db.begin();
                  let new_uid = await db.table('public.users').add({user_name:'charles'});
                  await db.commit(); // Attention! if start a transaction don't forget finish it!
              }catch (e){
                  db.rollback(); // Attention! if start a transaction don't forget finish it!
              }
              
          })();

          自動完成

          如果表中有create_atupdate_atdelete_at。在CUD的操作中會自動填充NOW()

          軟刪除只在db.table(tableName).where(conditions).delete();時影響結(jié)果。

          SELECT類型的語句中,不會主動識,別并剔除delete_at非空的記錄。需要手動寫在conditions中。

          更多姿勢,見:https://github.com/blusewang/postgre-sql/blob/master/test/main.test.js

          瀏覽 18
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  猫咪www成人免费网站无码 | 黄片在线免费播放 | 波多野结衣中文字幕一区二区 | 欧美日韩三级片在线观看 | 小日本一级黄色电影 |