# -*- coding: utf-8 -*-
from psycopg2.pool import ThreadedConnectionPool,SimpleConnectionPool,PersistentConnectionPool

from constant import pg_name, pg_user, pg_pw, pg_host, pg_port
from public import gen_sql

# pgpool = ThreadedConnectionPool(1, 5, dbname=pg_name, user=pg_user, host=pg_host, password=pg_pw, port=pg_port)

# pgpool = SimpleConnectionPool(1, 5, dbname=pg_name, user=pg_user, host=pg_host, password=pg_pw, port=pg_port)
pgpool = PersistentConnectionPool(1, 100, dbname=pg_name, user=pg_user, host=pg_host, password=pg_pw, port=pg_port)

# 不管是哪种方式建立的连接池, 多进程或者多线程都会导致数据cursor 关闭, 出错等数据库问题, 即使是在每个进程中都建立连接池也不行(我的测试结果, 水平有限)

def conn_exe(*sp):
  conn = pgpool.getconn()  # 获取连接
  cursor = conn.cursor()  # 获取cursor
  cursor.execute(*sp)
  conn.commit()  # 没次操作都要提交
  pgpool.putconn(conn)  # 放回连接, 防止其他程序pg无连接可用
  return cursor

def fetchone_sql(*sp):
  cursor = conn_exe(*sp)
  # desc = cursor.description  # cursor 的具体描述信息
  fetchone = cursor.fetchone()
  cursor.close()
  return fetchone

def fetchall_sql(*sp):

  cursor = conn_exe(*sp)
  fetchall = cursor.fetchall()
  cursor.close()
  return fetchall

def get_insert_id(*sp):

  *sp += " returning id"   # 插入语句这样返回 插入的id(或者其他字段 看上一行的SQL 语句)

  cursor = conn_exe(*sp)
  insert_id = cursor.fetchone()[0]
  cursor.close()
  return insert_id

def run_sql(*sp):

  cursor = conn_exe(*sp)
  cursor.close()

python psycopg2 连接pg 建立连接池的更多相关文章

  1. 高性能网络编程(一)----accept建立连接

    编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点.希望应用代码完全不关 ...

  2. 高性能网络编程1----accept建立连接

    转 http://taohui.org.cn/tcpperf1.html  陶辉 taohui.org.cn 回到应用层,往往只需要调用类似于accept的API就可以建立TCP连接.建立连接的流程大 ...

  3. JDBC详解系列(三)之建立连接(DriverManager.getConnection)

      在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...

  4. 高性能网络编程(1)—accept建立连接‍(转载,作者:陶辉)

    编 写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发 的效率,追求更快的完成项目功能点.希望应用代码完全 ...

  5. Http建立连接的方式

    1.协议简介 Http 协议:应用层协议 TCP 协议:传输层协议,主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出的顺序一致,TCP具有可靠,面向连接 ...

  6. 【转】高性能网络编程1----accept建立连接

    最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比 ...

  7. golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  8. [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接

    原文链接 一.HTTP协议和TCP协议 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题, ...

  9. ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

    ubuntu上跑python连接pg,报错  ImportError: No module named psycopg2 root@pgproxy1:~# python /home/zxw/PGWri ...

随机推荐

  1. 配置NFS

    主机端 sudo apt-get install nfs-kernel-server 修改配置文件 sudo vim /etc/exports 添加: /home/nfs/fs_qtopia *(rw ...

  2. pyspider 笔记

    fetch_type='js' 运行 js代码

  3. HTTPS 基本流程2

    Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份,以下图为例 2.1  验证流程 注:文中所写的序号与图不对应但流程是对应的 1 客户端发起一个https的请求,把自身支持的一系 ...

  4. C++_数字时钟

    利用C++语言基础,制作了一个模拟电子时钟的程序. #include<iostream> #include<windows.h> //延时与清屏头文件 using namesp ...

  5. OS模块学习

    import os,sys s = os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 # print(s) # os.chdir('..') #改变当前工作目录 # s ...

  6. css样式的书写顺序及原理——很重要!

    记得刚开始学习前端的时候,每次写css样式都是用到什么就在样式表后添加什么,完全没有考虑到样式属性的书写顺序对网页加载代码的影响.后来逐渐才知道正确的样式顺序不仅易于查看,并且也属于css样式优化的一 ...

  7. WPF 学习笔记

    依赖属性(Dependency Property) 相比较于普通属性,依赖属性有以下特点: 变化通知(change notification) 节省内存 使用某种带优先级决定策略(resolution ...

  8. NTP时间服务

    时间服务 NTP:Network Time Protocol 作用:用来给其他主机提供时间同步服务 NTP的配置文件 /etc/ntp.conf NTP相关的命令 date:显示/修改系统时间 hwc ...

  9. case ··· when ··· then ····的使用,同一字段不同内容分组显示

    问题: 查询结果显示成--> sql: SELECT 姓名, SUM(CASE WHEN (课程 = '语文') THEN 分数 ELSE 0 END) AS 语文, SUM(CASE WHEN ...

  10. 基于WebGL架构的3D可视化平台ThingJS-搭建设备管理系统

    国内高层建筑不断兴建,它的特点是高度高.层数多.体量大.面积可达几万平方米到几十万平方米.这些建筑都是一个个庞然大物,高高的耸立在地面上,这是它的外观,而随之带来的内部的建筑设备也是大量的.为了提高设 ...