You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:40:28