如何在psycopg3中获取server_version?
如何在psycopg3中获取server_version?
我懂你遇到的困扰了——psycopg3对Connection对象的属性做了调整,原来psycopg2里直接用的server_version属性,现在被移到了info子对象下面,所以直接访问才会抛出AttributeError。
这里有两种实用的解决办法,首推第一种,因为能和你原来的代码逻辑无缝衔接:
方法一:通过connection.info.server_version获取
psycopg3的Connection对象新增了info属性,里面封装了服务器版本、连接参数等各类信息,info.server_version返回的整数格式和psycopg2的server_version完全一致(比如140000对应14.0版本),直接替换原有代码即可:
from django.db import connection def test_postgresql_version(self): # 改用info属性获取版本号 postgresql_version = connection.cursor().connection.info.server_version if postgresql_version >= 140000: pass else: raise NotImplementedError("postgresql version must be at least 14.0.")
方法二:执行原生SQL查询版本
如果你更习惯用SQL的方式,也可以执行SELECT version();拿到版本字符串后自行解析:
from django.db import connection def test_postgresql_version(self): with connection.cursor() as cursor: cursor.execute("SELECT version();") version_string = cursor.fetchone()[0] # 从版本字符串中提取主版本号,比如从"PostgreSQL 14.5 ..."中拿到14 major_version = int(version_string.split()[1].split('.')[0]) if major_version >= 14: pass else: raise NotImplementedError("postgresql version must be at least 14.0.")
第一种方法显然更省心,不需要修改判断逻辑,换个属性路径就能解决问题啦。
备注:内容来源于stack exchange,提问作者Uri
相关产品推荐
相关产品推荐

