psycopg2 使用ThreadedConnectionPool 工具封装

news2025/1/15 21:01:46

psycopg2 介绍

        psycopg2库介绍: Psycopg2是一个用于Python编程语言的第三方库,用于访问PostgreSQL数据库系统。它提供了一组工具和方法,可以轻松地在Python程序中进行数据库操作,包括查询、插入、更新、删除等操作。

以下是Psycopg2库的一些主要特点:

  1. 简单易用: Psycopg2提供了简单的API,易于学习和使用。
  2. 高性能: Psycopg2是基于C语言实现的,能够提供高效的数据库操作。
  3. 完全兼容: Psycopg2与PostgreSQL数据库完全兼容,并支持大多数PostgreSQL特性。
  4. 安全性: Psycopg2具有内置的防止SQL注入攻击的功能,能够保证数据安全。
  5. 使用Psycopg2库进行数据库操作通常需要以下步骤:
  6. 安装psycopg2库:可以使用pip install psycopg2来安装该库。
  7. 建立数据库连接:使用psycopg2库提供的connect()方法建立与数据库的连接。
  8. 执行SQL语句:使用psycopg2提供的方法执行SQL语句,如查询、插入、更新等操作。
  9. 处理查询结果:如果执行的是查询操作,需要使用fetchone()或fetchall()方法来处理查询结果。
  10. 关闭连接:最后需要使用close()方法关闭数据库连接。

以下为封装后的utils工具,可直接在项目中使用:

1.数据库配置类 config.py

# prod 环境配置
# POSTGRE_HOST = "samrt.prod.xxx.cloud"
# POSTGRE_PORT = 1921
# POSTGRE_USER = "check_prod"
# POSTGRE_DATABASE = "check_prod"
# POSTGRE_PASSWORD = "VLjxs0K8888BMWh"

# dev环境配置
POSTGRE_HOST = "smart.dev.xxx.cloud"
POSTGRE_PORT = 1921
POSTGRE_USER = "check_dev"
POSTGRE_DATABASE = "check_dev"
POSTGRE_PASSWORD = "Ku3py19822gBaXsNW"

2.封装的通用数据库操作类 PostgreSqlPool.py

from psycopg2 import pool
from config import *


class PostgreSqlTool(object):
    def __init__(self):
        try:
            self.connectPool = pool.ThreadedConnectionPool(2, 10, host=POSTGRE_HOST, port=POSTGRE_PORT,
                                                           user=POSTGRE_USER, password=POSTGRE_PASSWORD,
                                                           database=POSTGRE_DATABASE, keepalives=1,
                                                           keepalives_idle=30, keepalives_interval=10,
                                                           keepalives_count=5)
        except Exception as e:
            print(e)

    def getConnect(self):
        conn = self.connectPool.getconn()
        cursor = conn.cursor()
        return conn, cursor

    def closeConnect(self, conn, cursor):
        cursor.close()
        self.connectPool.putconn(conn)

    def closeAll(self):
        self.connectPool.closeall()

    # 执行增删改
    def execute(self, sql, value=None):
        conn, cursor = self.getConnect()
        try:
            res = cursor.execute(sql, value)
            conn.commit(conn, cursor)
            self.closeConnect(conn, cursor)
            return res
        except Exception as e:
            conn.rollock()
            raise e

    def selectOne(self, sql):
        conn, cursor = self.getConnect()
        cursor.execute(sql)
        result = cursor.fetchone()
        self.closeConnect(conn, cursor)
        return result

    def selectAll(self, sql):
        conn, cursor = self.getConnect()
        cursor.execute(sql)
        result = cursor.fetchall()
        self.closeConnect(conn, cursor)
        return result

3. 实际使用操作sql类

读取本地task.txt 中的任务号,查询数据库,将查询结果写到最大批次查询结果.csv文件中

# coding=utf-8
import PostgreSqlPool

if __name__ == "__main__":
    pgsql = PostgreSqlPool.PostgreSqlTool()
    # 打开一个文件
    with open('task.txt') as fr:
        # 读取文件所有行
        lines = fr.readlines()
    lines = [i.rstrip() for i in lines]
    list = []
    list.append("taskId,batchId\n")
    for taskId in lines:
        sql = "select task_id, batch_id  from ics_batch_info where batch_id=(select MAX(batch_id) from ics_batch_info WHERE task_id = '{taskId}')".format(
            taskId=taskId)
        print("执行sql: ", sql)
        result = pgsql.selectOne(sql)
        if result is not None:
            list.append(result[0] + "," + str(result[1]) + "\n")
            print(result)

    list[len(list) - 1] = list[len(list) - 1].rstrip();
    with open("最大批次查询结果.csv", 'w') as fw:
        fw.writelines(list)

    print("☺☺☺执行完毕☺☺☺")

读取文件和导出csv文件均在本目录下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选? 网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述: 对啦&…

基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅管理系统 系统有2权限&#xff1…

Qt快速学习(三)--事件,绘图,文件系统

目录 1. Qt消息机制和事件 1.1 事件 1.2 event() 1.3 事件过滤器 1.4 总结 2 绘图和绘图设备 2.1 QPainter 2.2 绘图设备 2.2.1 QPixmap、QBitmap、QImage 2.2.2 QPicture 3. 文件系统 3.1 基本文件操作 3.2 二进制文件读写 3.3 文本文件读写…

运维作业7

1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 1)拉取mysql5.6和owncloud镜像 2)登录本机ip地址,输入用户名密码 2、安装搭建私有仓库 Harbor 1)安装docker-compose编排工具 2)安装harbor [rootserver ~]# tar xf harbor-…

“石头剪刀布”游戏:while、函数自调用实现循环游戏

if…else实现“石头剪刀布”游戏,while、函数自调用实现循环游戏。 (本笔记适合学过if…else的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&#xff0c…

Leetcode刷题笔记--Hot21-30

1--全排列(46) 主要思路1: 经典全排列,每次枚举每一位时,重头开始枚举,用一个访问数组记录当前已经被访问过的数字; 这道题不包含重复数字,所以不需要进行树层上的剪枝; …

【机器学习】python基础实现线性回归

手写梯度下降的实现ykxb的线性回归 算法步骤: (1)构造数据,y3*x5; (2)随机初始化和,任意数值,例如9,10; (3)计算,,并计算 (4&…

Linux基本指令【上】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析3 目录 👉🏻浅识操作系统👉🏻ls.和. .sta…

【C++】STL——map的介绍和使用、map的构造函数、map的迭代器、map的容量和访问函数、map的增删查改函数

文章目录 1.map的介绍2.map的使用2.1map的构造函数2.2map的迭代器2.3map的容量和访问函数2.4map的增删查改函数 1.map的介绍 map的介绍 (1)map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 &#xff…

WPS右键新建没有docx pptx xlsx 修复

解决wps右键没有新建文档的问题 右键没有新建PPT和Excel 1 wps自带的修复直接修复没有用 以上不管咋修复都没用 2 先编辑注册表 找到 HKEY_CLASSES_ROOT CTRLF搜文件扩展名 pptx docx xlsx 新建字符串 三种扩展名都一样操作 注册表编辑之后再次使用wps修复 注册组件&am…

Docker Desktop 笔记

https://blog.csdn.net/qq_39611230/article/details/108641842 https://blog.csdn.net/KgdYsg/article/details/118213499 1、修改配置 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…

Vue使用Animate.css

说一下Animate.css这个动画库&#xff0c;很多的动画在这个库里面都定义好了&#xff0c;我们用的时候可以直接使用里面的类名就可以了&#xff0c;就是直接目标元素绑定对应的类名就可以实现动画效果&#xff0c;非常方便&#xff0c;库其实也相对简单&#xff0c;使用起来也简…

IDEA 一键清除所有的无效引用

快捷键 // windows版本 CtrlAltO//mac版本 controloptionO 使用方式 1. 清除单个类中的无效的import, 打开具体的类。然后使用快捷键。 2. 清除整个项目的无效引用&#xff0c;左键点击项目名&#xff0c;然后使用快捷键&#xff0c;会出现以下提示。按Run即可。

21.2 CSS 三大特性与页面布局

1. 开发者工具修改样式 使用开发者工具修改样式, 操作步骤如下: * 1. 打开开发者工具: 在浏览器中右键点击页面, 然后选择检查或者使用快捷键(一般是 F12 或者 CtrlShiftI)来打开开发者工具.* 2. 打开样式编辑器: 在开发者工具中, 找到选项卡或面板, 一般是Elements或者Elemen…

2. HBase中文学习手册之如何运行一个单机版的HBase?

HBase中文学习手册之如何运行一个单机版的HBase? 1.1 介绍1.2 快速开始1.2.1 安装 Open JDK 81.2.2 启动 HBase1.2.3 Shell 练习1.2.4 运行停止脚本来停止HBase 1.1 介绍 上篇博文HBase中文学习手册之揭开Hbase的神秘面纱分享了 HBase 的一些理论基础知识的介绍。 本文将会继…

MAYA粒子基础_场

重力场 牛顿场 径向场 均匀场和重力场的区别 空气场 推动物体 阻力场 推动物体 涡流场 湍流场 体积轴场

ubuntu 22.04 LTS openai triton 安装

第一种方法&#xff1a; pip install triton 第二种方法&#xff0c;安装最新的版本&#xff1a; pip install -U --index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/ triton-nightly 第三种方法&#xff1a; git c…

[NLP]LLM--transformer模型的参数量

1. 前言 最近&#xff0c;OpenAI推出的ChatGPT展现出了卓越的性能&#xff0c;引发了大规模语言模型(Large Language Model, LLM)的研究热潮。大规模语言模型的“大”体现在两个方面&#xff1a;模型参数规模大&#xff0c;训练数据规模大。以GPT3为例&#xff0c;GPT3的参数量…

2023年8月23日博客更新

首发博客地址 https://blog.zysicyj.top/ 新增相册集和结婚相册 https://blog.zysicyj.top/gallery/ 相册整理不容易呀&#xff0c;后续有机会再慢慢整理吧&#xff0c;相册慢慢加上 我选择了大图展示&#xff0c;这种高清图片&#xff0c;我觉得还是大点的好&#xff0c;默认…