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

  • 相关阅读:
    简要描述客户端发送的http request header都包含哪些内容
    如何利用TestNG监听器优化测试报告
    TestNG 监听器 ITestListener
    p3317 [SDOI2014]重建
    EZOJ #387字符串
    EZOJ #386 最小生成树
    EZOJ #385 排列
    EZOJ #375高速公路
    EZOJ #374学习
    EZOJ #373排序
  • 原文地址:https://www.cnblogs.com/520zm/p/10743224.html
Copyright © 2011-2022 走看看