psycopg2 如何验证链接是否有效

psycopg2 中,验证数据库连接是否有效(即连接是否仍然活跃)可以通过以下几种方法实现:


1. 使用 conn.closed 属性

psycopg2 的连接对象有一个 closed 属性,可以检查连接是否已关闭:

import psycopg2conn = psycopg2.connect(host="localhost",database="testdb",user="postgres",password="your_password"
)# 检查连接是否关闭
if conn.closed:print("连接已关闭")
else:print("连接仍然有效")conn.close()

问题closed 只能检测连接是否被显式关闭,无法检测连接是否因网络问题或数据库超时而失效


2. 执行简单查询(推荐)

最可靠的方法是 执行一个简单的 SQL 查询(如 SELECT 1),如果查询失败,则说明连接已断开:

def is_connection_valid(conn):try:cursor = conn.cursor()cursor.execute("SELECT 1")  # 执行简单查询cursor.fetchone()  # 获取结果(可选)cursor.close()return True  # 查询成功,连接有效except (psycopg2.Error, psycopg2.OperationalError):return False  # 查询失败,连接已断开# 使用示例
if is_connection_valid(conn):print("连接有效")
else:print("连接已断开,需要重新连接")conn = psycopg2.connect(...)  # 重新建立连接

优点

  • 能检测 网络中断、数据库超时、连接被服务器关闭 等情况。
  • 适用于连接池(如 ThreadedConnectionPool)中的连接健康检查。

3. 使用 conn.poll() 方法(适用于异步检查)

psycopg2 提供了 conn.poll() 方法,可以检查连接状态:

def is_connection_valid(conn):try:conn.poll()  # 检查连接状态return Trueexcept psycopg2.OperationalError:return False

说明

  • poll() 会返回连接状态(如 psycopg2.extensions.POLL_OKPOLL_ERROR 等)。
  • 但通常直接捕获异常更简单。

4. 在连接池中验证连接

如果使用 ThreadedConnectionPool,可以在 getconn() 后验证连接是否有效,如果无效则重新创建:

from psycopg2 import OperationalErrordef get_valid_connection(pool):conn = pool.getconn()if not is_connection_valid(conn):  # 使用前面的方法检查conn.close()  # 关闭无效连接conn = pool.getconn()  # 尝试获取新连接return conn# 使用示例
conn = get_valid_connection(pool)

5. 设置 keepalives 参数(预防连接断开)

在连接字符串中设置 keepalives 参数,让 PostgreSQL 服务器定期发送心跳包,防止连接因空闲超时而断开:

conn = psycopg2.connect(host="localhost",database="testdb",user="postgres",password="your_password",keepalives=1,          # 启用 TCP keepalivekeepalives_idle=30,    # 30秒空闲后发送心跳keepalives_interval=10, # 每10秒发送一次心跳keepalives_count=5     # 最多尝试5次
)

适用场景

  • 适用于长时间空闲的连接,减少因网络问题导致的连接断开。

总结

方法适用场景备注
conn.closed仅检查连接是否被显式关闭无法检测网络问题
执行简单查询(SELECT 1检测连接是否真正可用推荐方法
conn.poll()异步检查连接状态较少使用
连接池 + 验证ThreadedConnectionPool 中使用确保获取的连接有效
keepalives 参数预防连接因空闲超时断开适用于长时间空闲连接

最佳实践

  1. 在获取连接后,先执行 SELECT 1 验证连接是否有效
  2. 如果连接无效,关闭并重新获取连接(避免连接池返回坏连接)。
  3. 设置 keepalives 参数,减少空闲连接被断开的情况。

这样能确保你的应用在连接失效时自动恢复,提高稳定性。

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

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

相关文章

数据科学与计算-电商双11美妆数据分析

一、项目背景:双 11 美妆数据的价值所在 每年的 “双 11” 购物节都是电商行业的盛宴,而美妆品类作为消费热门领域,蕴含着丰富的用户行为与市场趋势信息。该项目聚焦双 11 期间的美妆电商数据,旨在通过数据分析揭示以下核心问题&…

简单了解MongoDB数据存储

官方文档:MongoDB中文手册|官方文档中文版 | MongoDB-CN-Manual 什么是MongoDB? MongnDB是一个分布式文件存储数据库(或叫文档数据库),是一个介于 关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数…

web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库

经验心得 这个也是crud业务单子,第二个聊点其他的,从最早的无分层开发,到三层开发,工厂,各种接口,再到后面多层,代码无痕aop,各种框架等,都是在方便我们快速打架一个程序…

[QtADS]解析ads.pro

本文来源 : 腾讯元宝subdirs : 子目录TEMPLATE subdirs的作用​​​​核心功能​​:声明当前项目为“多项目管理”模式。Qt 的构建系统(qmake)会遍历 SUBDIRS中列出的子目录,在每个子目录中寻找 .pro文件并递归构建。…

三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,手电筒置灰,无法打开,提提示相机正在使用

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,点击手电筒,手电筒置灰,无法打开,提提示相机正在使用9348353 目录 一、问题背景 二、:问题分析过程 2.1:基于…

Java Selenium 自动打开浏览器保存截图

// 代码 public class ScreenshotExample {public static void main(String[] args) {// 1. 设置浏览器驱动路径(根据实际路径修改)System.setProperty("webdriver.chrome.driver", "D:\\chromedriver-win64\\chromedriver.exe");//…

新商机:为了减少辐射,可以用座机打机房中心再转手机

某些人痛恨自家附近有基站,说是辐射太大。你不能说人家迷信。一般解决办法就是拆基站。而我觉得,商机来了。现在座机基本没人装了。新商机就是座机。附近没有基站,又要打电话,怎么办?装座机。用座机打电话时&#xff0…

【Java|第十九篇】面向对象九——String类和枚举类

&#xff08;四&#xff09;面向对象11、String类&#xff08;1&#xff09;概述<1>String是一个类&#xff0c;引用数据类型&#xff0c;用来表示字符串&#xff1b;<2>String是Lang包下的类&#xff0c;使用不需要导包&#xff1b;<3>字符串的值不能变&…

超越相似名称:Elasticsearch semantic text 如何在简洁、高效、集成方面超越 OpenSearch semantic 字段

作者&#xff1a;来自 Elastic Mike Pellegrini, Nick Chow 及 Libby Lin 比较 Elasticsearch 语义文本和 OpenSearch 语义字段在简洁性、可配置性和效率方面的表现。 自己动手体验向量搜索&#xff0c;使用这个自定进度的 Search AI 实操学习。你现在可以开始免费的云试用&am…

OpenAI发布最新大模型GPT5、本地部署GPT开源模型

OpenAI发布最新大模型GPT5、本地部署GPT开源模型 GPT-5概述 北京时间 2025年8月8日 凌晨1点 OPENAI举行了1个小时的线上发布会&#xff0c;正式推出了其史上最聪明、最强大的大模型GPT-5。 GPT-5是OpenAI发布的最新一代大型语言模型&#xff0c;它基于Transformer架构&#xff…

容器网络模式选择在云服务器多节点部署中的连通性验证方案

容器网络模式选择在云服务器多节点部署中的连通性验证方案在云计算环境中&#xff0c;容器网络模式的选择直接影响着多节点部署的通信效率和安全性。本文将从Docker原生网络驱动对比入手&#xff0c;深入分析Overlay、Host、Bridge等主流网络模式在跨主机通信场景下的性能表现&…

电商双11美妆数据分析

1、数据初步了解2.数据清洗2.1 重复值处理 直接删除重复值。2.2 缺失值处理通过上面观察数据发现sale_count,comment_count 存在缺失值,先观察存在缺失值的行的基本情况存在的缺失值很可能意味着售出的数量为0或者评论的数量为0&#xff0c;所以我们用0来填补缺失值。2.3 数据挖…

Pytest项目_day14(参数化、数据驱动)

parametrize 参数化可以组装测试数据。在测试前定义好测试数据&#xff0c;并在测试用例中使用 单参数单次循环 我们可以在装饰器中使用mark.parametrize&#xff0c;来定义参数名和参数值列表 参数名还需要传给函数参数名需要用字符串来定义&#xff0c;参数值列表需要用可迭代…

Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot的异同相关概念

总述Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot 是分属不同技术领域的工具&#xff0c;涵盖前端框架、后端框架、数据库工具等角色&#xff0c;它们在开发中既有功能交集&#xff0c;也有明确的定位差异。一、相同点服务端参与能力五者均能在服务端发挥作用&#xff1…

第2节 大模型分布式推理架构设计原则

大模型推理系统的设计过程,本质上是在多重约束下寻找最优解的过程。硬件资源的物理限制、场景对性能的刚性要求、系统的可扩展性需求,共同构成了设计的边界条件。明确这些约束的具体表现形式,理解性能指标之间的权衡逻辑,确立架构设计的核心原则,是构建高效分布式推理系统…

快速部署一个鉴黄服务

1.安装依赖pip install opennsfw22.代码实现import opennsfw2 as n2# 将自动下载预训练模型 open_nsfw_weights.h5 到 C:\Users\Administrator\.opennsfw2\weights # pip install opennsfw2# 单张预测 image_path 1.jpg nsfw_probability n2.predict_image(image_path) print…

Camera open failed

前言 由前面的几篇博客可以知道&#xff0c;openCamera&#xff0c;createCaptureSession&#xff0c;setRepeatingRequest&#xff0c;capture是非常重要的过程&#xff0c;如果其中一个环节出了问题时该如何分析呢&#xff0c;这里我们首先从打开相机流程时&#xff0c;打开…

医美产业科技成果展陈中心:连接微观肌肤世界与前沿科技的桥梁

作为一名深耕展陈设计施工的从业者&#xff0c;当接到医美产业科技成果展陈中心的项目时&#xff0c;我深知这不是简单的 “技术堆砌”&#xff0c;而是要在 “科学严谨性” 与 “美学体验感” 之间找到平衡 —— 让参观者既能看懂激光设备的波长原理&#xff0c;又能感知胶原蛋…

在 Android 系统中清理应用数据但保留应用程序本身,可以通过以下几种方法实现

在 Android 系统中清理应用数据但保留应用程序本身&#xff0c;可以通过以下几种方法实现在 Android 系统中清理应用数据但保留应用程序本身&#xff0c;可以通过以下几种方法实现&#xff1a;方法 1: 使用 Android 设置&#xff08;无需 root&#xff09;方法 2: 使用 ADB 命令…

Linux中tty与8250-uart的虐恋(包括双中断发送接收机制)

串口通用驱动文件在哪里&#xff1f; drivers/tty/serial/哪一个是正确的compatible&#xff1f; arch/arm64/boot/dts/rockchip/rk3568.dtsi uart3: serialfe670000 {compatible "rockchip,rk3568-uart", "snps,dw-apb-uart";reg <0x0 0xfe670000 0…