1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

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

        Postgre-SQL

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

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

        比如:

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

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

        • * await db.table(table).where(condition).getField(field). 自動(dòng)在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ù)里按需要在三個(gè)不同的級別自由切換。更靈活更高效。

        有了連接池可以很好的避免因?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();
            }
            
        })();

        會(huì)話模式

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

        會(huì)話模式會(huì)根據(jù)業(yè)務(wù)自動(dòng)調(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
            }
        })();

        會(huì)話模式 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!
            }
            
        })();

        自動(dòng)完成

        如果表中有create_at、update_atdelete_at。在CUD的操作中會(huì)自動(dòng)填充NOW()。

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

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

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

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产无遮挡又黄又爽又色视频软件 | 亚洲va欧美va天堂v国产桃 | 亚洲A片大全 | 操逼啊 | 欧美精品一区三区 | 我爱搞在线 | 亚洲猛交xxxx乱大交 | 韩国黄色三级视频 | 无app毛片入口 | 漂亮的秘书伦理hd观看 |