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

  • 相关阅读:
    职场利器:说服力书籍排行榜
    经商必读的6本书推荐
    有关企业文化的书籍推荐
    创业书籍推荐
    企业文化建设的基本内容和主要步骤
    沟通书籍排行榜推荐
    企业文化建设案例与方案分享
    如何提高个人领导力?
    Project Recording: Date and Factory Date[转载]
    SAP Control framework–实例
  • 原文地址:https://www.cnblogs.com/520zm/p/10743224.html
Copyright © 2011-2022 走看看