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()

  • 相关阅读:
    使用fscanf读取文本文件
    实验室开发机系统结构图
    字符串是否为数字及有效性检查
    winXP系统通过蓝牙在笔记本和手机之间传递数据
    HarborGIS3D场景编辑器速成街区数据
    判断一个浮点数是否为NAN(INF)
    单文档中只是想得到当前View类的指针
    windows控制台中使用不同颜色显示不同类型的日志
    c++中enum 如何使用
    陈佩斯
  • 原文地址:https://www.cnblogs.com/520zm/p/10743224.html
Copyright © 2011-2022 走看看