zoukankan      html  css  js  c++  java
  • node 和 postgres

    安装 npm i pg ,如果慢的话,记得爬梯子

    连接池的方式:

    var pg = require('pg');
    
    // 数据库配置
    var config = {  
        user:"postgres",
        database:"test",
        password:"postgres",
        port:5432,
        // 扩展属性
        max:20, // 连接池最大连接数
        idleTimeoutMillis:3000, // 连接最大空闲时间 3s
    }
    // 创建连接池
    var pool = new pg.Pool(config);
    // 查询
    pool.connect(function(err, client, done) {  
      if(err) {
        return console.error('数据库连接出错', err);
      }
      // 简单输出个 Hello World
      client.query('SELECT $1::varchar AS OUT', ["Hello World"], function(err, result) {
        done();// 释放连接(将其返回给连接池)
        if(err) {
          return console.error('查询出错', err);
        }
        console.log(result.rows[0].out); //output: Hello World
      });
    });
    

    客户端直连方式:

    const pg=require('pg')
    var conString = "postgres://username:password@localhost/databaseName";
    var client = new pg.Client(conString);
    client.connect(function(err) {
        if(err) {
          return console.error('连接postgreSQL数据库失败', err);
        }
        client.query('SELECT * FROM tableName', function(err, data) {
          if(err) {
            return console.error('查询失败', err);
          }else{
            // console.log('成功',data.rows); 
            console.log('成功',JSON.stringify(data.rows)); 
          }
          client.end();
        });
      });

    自己摸索的一种方式:

    // 连接pg
    var pg = require('pg');
    var pool = new pg.Pool({
        host: 'XXXXXX',
        user: 'XXXX',
        password: 'XXXXX',
        database: 'XXX',
        port:5432,
        max:20, // 连接池最大连接数
        idleTimeoutMillis:3000, // 连接最大空闲时间 3s
    });
    
    function query(sql, callback) {
        pool.connect(function (err, connection,done) {
            if (err) {
                console.log('connect query:' + err.message);
                return;
            }
            // Use the connection
            connection.query(sql,[],function (err, rows) {
    	    done();
                callback(err, rows);
                //connection.release();//释放链接
            });
        });
    }
    exports.query = query;
    
    /**
         * 获取survey
    	 *localhost:5000/getAllSurveyList
         */
        app.get('/getAllSurveyList', function (req, res) {
            console.log("getAllSurveyList");
            db.query('select id,trim(latitude) as latitude,trim(lontitude) as lontitude,isshow as '+'"'+'isShow'+'"'+' from survey', function (err,rows) {	
                if (err) {
    				console.log(err);
    				console.log('--getAllSurveyList: 查询失败');
                    res.json({result:'false',datas: null});
                } else {
    				console.log('--getAllSurveyList: 查询成功');
    				//console.log(rows);
                    res.json({result: 'true', datas: rows.rows});
                }
            })
        });

    CRUD

    var pg = require('./pg'); //加载模块node-postgres,该模块要与本文件放于同一个目录下
    var conString = "postgres://postgres:postgres@localhost:5432/node-test";//此时数据库必须已经创建
                    //anything://user:password@host:port/database
    var client = new pg.Client(conString);
    
    client.connect(function(err) {
        if(err) {
            return console.error('could not connect to postgres', err);
        }
         
        //删除存在表
        console.log("Dropping table 'person'")
        var query = client.query("drop table if exists person");
        query.on('end', function() {
            console.log("Dropped!");
        });
         
        //创建表
        console.log("Creating table 'person'");
        query = client.query("create table person(id serial, username varchar(10), password varchar(10), age integer)");
        query.on('end', function(){
            console.log("Created!");
         }); 
        
        //添加
        client.query('INSERT INTO person(username, password, age) VALUES($1, $2, $3)', ["zhangsan", "123456", 20], function(err, result) {
        console.log( "====================add========================");
        if(err) {
            console.log(err); 
            return rollback(client);
        }
            console.log( result);
        }); 
    
    
        //查询
        client.query('select username, password, age from person where id = $1', [3], function(err, result) {
        console.log( "===================query=========================");
        if(err) {
            console.log(err);  
        }
            console.log(result.rows[0]);
        });
    
        //更新
        client.query('update person set password=$1 where id = $2', ["11a",1], function(err, result) {
        console.log( "=====================update=======================");
        if(err) {
            console.log(err);  
        }
            console.log(result);
        });
    
        //删除
        client.query('delete from person where id = $1', [1], function(err, result) {
        console.log( "====================remove=======================");
        if(err) {
            console.log(err);  
        }
            console.log(result);
            client.end();
        });
        
    });
     
     var rollback = function(client) { 
      client.query('ROLLBACK', function() {
        client.end();
      });
    };
    
  • 相关阅读:
    PAT (Advanced Level) Practice 1054 The Dominant Color (20 分)
    PAT (Advanced Level) Practice 1005 Spell It Right (20 分) (switch)
    PAT (Advanced Level) Practice 1006 Sign In and Sign Out (25 分) (排序)
    hdu 5114 Collision
    hdu4365 Palindrome graph
    单链表查找最大值、两个递增的链表合并并且去重
    蓝桥杯-最短路 (SPFA算法学习)
    蓝桥杯-最大最小公倍数
    Codeforces-470 div2 C题
    蓝桥杯-地宫取宝
  • 原文地址:https://www.cnblogs.com/marszhw/p/11279952.html
Copyright © 2011-2022 走看看