zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    [整理]ADB命令行学习笔记
    3、HTML的body内标签1
    2、HTML的head内标签
    1、HTML的本质以及在web中的作用
    3.11-3.15 HDFS HA
    3.9-3.10 分布式协作服务框架Zookeeper
    3.6-3.8 分布式环境启动、测试
    3.1-3.5 分布式部署hadoop2.x的准备和配置
    2.28 MapReduce在实际应用中常见的优化
    2.27 MapReduce Shuffle过程如何在Job中进行设置
  • 原文地址:https://www.cnblogs.com/520zm/p/10743224.html
Copyright © 2011-2022 走看看