---
title: 如何在openGauss使用psycopg2驱动-官方技术文章-鲲鹏社区
description: 本文主要介绍如何在openGauss使用psycopg2驱动。
keywords: Gauss,如何在,驱动,官方技术文章,鲲鹏社区,介绍,上的问题,GUC
url: https://www.hikunpeng.com/developer/techArticles/20230912-4?envFlag=1
section: (其他)
---

# 如何在openGauss使用psycopg2驱动-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20230912-4?envFlag=1
描述: 本文主要介绍如何在openGauss使用psycopg2驱动。
关键词: Gauss,如何在,驱动,官方技术文章,鲲鹏社区,介绍,上的问题,GUC

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

如何在openGauss使用psycopg2驱动

如何在openGauss使用psycopg2驱动

实战经验

发表于 2021/04/02

0

## psycopg2 介绍

psycopg2 是一款PostgreSQL的Python驱动包，是PostgreSQL官方唯一指定与支持的Python驱动，也是使用最广泛的、最稳定的PostgreSQL Python driver.

## psycopg2在openGauss上的问题

由于openGauss 对原生PostgreSQL的通信协议进行了安全加固，这导致与PostgreSQL的默认通信协议互相不兼容了，因此，使用psycpog2 的PostgreSQL原生版本默认是不能连接openGauss的。会报类似下述错误：

## 通过修改GUC进行规避

涉及的GUC参数是password_encryption_type，PostgreSQL默认的加密方式是md5，由于md5已经不安全了，为了提高openGauss的安全能力，openGauss支持sha256, 并且默认是sha256的加密方式，这就导致了上述报错。但是openGauss并没有删除md5的加密和验证逻辑，因此，是可以通过修改该GUC参数开启md5加密方式的。

开启方法：

```
gs_guc reload -D $PGDATA -c "password_encryption_type = 1"
```

一定要在设置完上述参数后，再新建用户。

然后就可以使用该新建用户登录数据库了。

## 通过替换libpq解决问题

使用md5是存在一点点风险的，如果想要使用更安全的加密算法，则必须要替换PostgreSQL原生的libpq了。方法如下：

（1）通过pip安装PostgreSQL的python驱动：pip install psycopg2-binary

（2）切换到psycopg2的安装目录中，一般是在/$PYTHONINSTALL/lib/pythonx.x/site-packages/psycopg2

（3）执行ldd ./_psycopg.cpython-37m-x86_64-linux-gnu.so, 该文件名供参考

（4）将openGauss的lib目录下的libpq及相关依赖so文件拷过来，替换掉此处PostgreSQL原生的同名文件即可。

## 通过重新编译psycopg2 解决问题

除手动替换之外，还可以在已经安装好openGauss的环境中通过psycopg2的源代码编译出包，这样经过编译的psycopg2包就会自带openGauss的libpq及其依赖文件，也更方便打包出包。

注意：

（1）如果环境中已经安装过PostgreSQL了，要确保openGauss库文件的路径更优先，即LD_LIBRARY_PATH中的位置在前。

（2）libpq.so 还有很多依赖文件，这些文件包括一些算法库等，如果需要发布，要一起发布。可通过ldd命令查看依赖列表。

编译方法：

（1）在环境中安装openGauss，并配置好环境变量；

（2）下载psycopg2的源代码，切换到源代码根目录中；

（3）执行 python setup.py build 命令

（4）此时一般会报错，提示内容是版本校验不匹配，通过修改setup.py中的相应位置，把这个错屏蔽掉即可。也可以通过sed命令进行版本号替换（大约440行的位置）：sed -i "s/(pgmajor, pgminor, pgpatch)/(9, 2, 4)/g" setup.py

（5）再次执行步骤（3）；

编译好后会在跟目录下生成 build 子目录，内部即是编译后的包。

欢迎访问openGauss官方网站

openGauss开源社区官方网站：

https://opengauss.org/ [了解详情](https://opengauss.org)

openGauss组织仓库：

https://gitcode.com/opengauss [了解详情](https://gitcode.com/opengauss)

openGauss镜像仓库：

https://github.com/opengauss-mirror [了解详情](https://github.com/opengauss-mirror)

本页内容
