python psycopg2 连接pg 建立连接池
# -*- 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 建立连接池的更多相关文章
- 高性能网络编程(一)----accept建立连接
编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点.希望应用代码完全不关 ...
- 高性能网络编程1----accept建立连接
转 http://taohui.org.cn/tcpperf1.html 陶辉 taohui.org.cn 回到应用层,往往只需要调用类似于accept的API就可以建立TCP连接.建立连接的流程大 ...
- JDBC详解系列(三)之建立连接(DriverManager.getConnection)
在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...
- 高性能网络编程(1)—accept建立连接(转载,作者:陶辉)
编 写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发 的效率,追求更快的完成项目功能点.希望应用代码完全 ...
- Http建立连接的方式
1.协议简介 Http 协议:应用层协议 TCP 协议:传输层协议,主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出的顺序一致,TCP具有可靠,面向连接 ...
- 【转】高性能网络编程1----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比 ...
- golang中mysql建立连接超时时间timeout 测试
本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...
- [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接
原文链接 一.HTTP协议和TCP协议 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题, ...
- ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2
ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2 root@pgproxy1:~# python /home/zxw/PGWri ...
随机推荐
- Android 开发 获取设备信息与App信息
设备信息 设备ID(DeviceId) 获取办法 android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager ...
- java序列化和反序列化中的serialVersionUID有啥用
1.什么是序列化和反序列化 序列化就是将java对象转成字节序列的过程:反序列化就是将字节序列转成java对象的过程. java中,序列化的目的一种是需要将对象保存到硬盘上,一种是对象需要在网络中传 ...
- c++多态及实现原理
https://www.cnblogs.com/cxq0017/p/6074247.html 通过虚函数实现,普通函数在编译过程中即确定了函数的地址,虚函数的函数地址是在程序运行的时候确定的,有虚函数 ...
- 函数function
function add(x,y,z){ sum = x + y +z; document.write(x+"+"+y+"+"+z+"="+ ...
- 阿里云消息队列的C#使用http接口发送消息实例
app.config <appSettings> <clear/> <add key="Ons_Topic" value="XXX_Fini ...
- Build Tool/Maven, Gradle
一.Build Tool 1.什么是Build Tool build tool是可以自动由源代码创建可执行的应用程序的程序. Building 包括编译.链接和打包代码成一个可用的或可执行形式. 在小 ...
- CR--同事分享学习
1.持续发布是什么? 频繁地将软件的新版本,交付给质量团队或者用户,以供评审. 2.对接持续发布需要具备什么条件? 1) 测试自动化程度较高,持续发布的终态是不需要人工介入 2) 做到持续集成,持 ...
- js判断访问浏览器是安卓还是ios还是微信浏览器还是微博
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- angluar1时间控件,在浏览器里是没有问题的,但是真机时间报错NAN
因为是老项目并且用的angluar1有时也会很头疼没法直接打包和手机联调,所以浏览器上测试的多但是真机和浏览器还是不一样的,废话不说了,看图吧 我的时间插件代码是这样的 后台返回的数据格式是这样的 , ...
- map基本方法
添加功能: V put(K key, V value) 添加和修改 ,添加时返回null,修改时返回被修改的值 Map<String,String> map = new HashMa ...