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

  • 相关阅读:
    selet 语句详解
    第三章 sql 的约束
    第二章 创建数据库并插入数据
    第一章
    微信小程序(九)
    微信小程序(七)
    微信小程序(八)
    微信小程序(六)
    bzoj4622 [NOI 2003] 智破连环阵
    bzoj3996 [TJOI2015]线性代数
  • 原文地址:https://www.cnblogs.com/520zm/p/10743224.html
Copyright © 2011-2022 走看看