文章目录

  • 1. 简介
  • 2. 接口介绍
    • 开发流程
    • 接口说明
  • 3. 使用
    • 3.1 环境准备
    • 3.2 下载并加载 python 驱动
    • 3.3 创建数据库连接用户
    • 3.4 示例
  • 4. 常见报错

1. 简介

Psycopg 是一种用于执行 SQL 语句的 PythonAPI,可以为 PostgreSQL、openGauss 数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2 是对 libpq 的封装,主要使用 C 语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持 “COPY TO/COPY FROM” 功能。支持多种类型 Python 开箱即用,适配 PostgreSQL 数据类型;通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2 兼容 Unicode 和 Python 3。
openGauss 数据库提供了对 Psycopg2 特性的支持,并且支持 Psycopg2 通过 SSL 模式链接。

2. 接口介绍

开发流程

接口说明

openGauss 提供了如下接口供开发者使用:

  • psycopg2.connect()
    此方法创建新的数据库会话并返回新的 connection 对象(连接 openGauss 数据库实例的对象)。

conn=psycopg2.connect(dbname=“test”,user=“postgres”,password=“secret”,host=“127.0.0.1”,port=“5432”)

或者

conn = psycopg2.connect(“dbname=test user=postgres password=secret
host=127.0.0.1 port=5432”)

创建连接对象(SSl 连接)

conn = psycopg2.connect(dbname=“postgres”, user=“user”, password=“password”, host=“localhost”, port=port, sslmode=“verify-ca”, sslcert=“client.crt”, sslkey=“client.key”, sslrootcert=“cacert.pem”)

注意: 如果 sslcert, sslkey,sslrootcert 没有填写,默认取当前用户.postgresql 目录下对应的 client.crt, client.key, root.crt

  • connection.cursor()
    此方法用于返回新的 cursor 对象(用于整个数据库使用 Python 编程的 cursor)。

cursor(name=None, cursor_factory=None, scrollable=None,
withhold=False)

  • cursor.execute(query,vars_list)
    此方法执行被参数化的 SQL 语句(即占位符,而不是 SQL 文字)。psycopg2 模块支持用%s 标志的占位符。

curosr.execute(query,vars_list)

  • curosr.executemany(query,vars_list)
    此方法执行 SQL 命令所有参数序列或序列中的 SQL 映射。

curosr.executemany(query,vars_list)

  • connection.commit()
    此方法将当前挂起的事务提交到数据库。默认情况下,Psycopg 在执行第一个命令之前打开一个事务:如果不调用 commit (),任何数据操作的效果都将丢失。

connection.commit()

  • connection.rollback()
    此方法回滚当前挂起事务。执行关闭连接 “close ()” 而不先提交更改 “commit ()” 将导致执行隐式回滚。

connection.rollback()

  • cursor.fetchone()
    此方法提取查询结果集的下一行,并返回一个元组。返回单个元组,为结果集的第一条结果,当没有更多数据可用时,返回为 “None”。

cursor.fetchone()

  • cursor.fetchall()
    此方法获取查询结果的所有(剩余)行,并将它们作为元组列表返回。返回元组列表,为结果集的所有结果。空行时则返回空列表。

cursor.fetchall()

  • cursor.close()
    此方法关闭当前连接的游标。

cursor.close()

  • connection.close()
    此方法关闭数据库连接。此方法关闭数据库连接,并不自动调用 commit ()。如果只是关闭数据库连接而不调用 commit () 方法,那么所有更改将会丢失。

connection.close()

3. 使用

3.1 环境准备

本篇使用环境信息:

  • 华为云 HECS 2 核 4G
  • CentOS Linux release 7.6
  • Python 3.6.8
  • openGauss 3.1.0 极简版

3.2 下载并加载 python 驱动

1、可以在 openGauss 官网下载后用 FTP 工具比如 winscp 等上传到服务器,也可以直接在服务器上用 wget 方式获取,根据操作系统版本下载对应的驱动。

root 用户下新建存放目录,执行 wget 和解压命令。

mkdir psycopg2
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.0/x86/openGauss-3.1.0-CentOS-x86_64-Python.tar.gz
tar -zxvf openGauss-3.1.0-CentOS-x86_64-Python.tar.gz

解压后有两个文件夹 lib 和 psycopg2,分别放置对应的库文件。
2、在解压后的路径下执行拷贝命令,将驱动拷贝到 python3 下的 site-packages 目录

cp -r psycopg2/ /usr/lib/python3.6/site-packages/

3、修改 psycopg2 / 目录权限为 755

cd /usr/lib/python3.6/site-packages/    
chmod 755 psycopg2/

4、对于非数据库用户,需要将解压后的 lib 目录,配置在 LD_LIBRARY_PATH 中。

export $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/psycopg2/lib/
ldconfig

3.3 创建数据库连接用户

注意,由于 psycopg2 只能使用 MD5 方式连接,而 openGauss 默认安装时使用 sha256 加密,所以这里需要修改一下配置。
修改 data/single_node/postgresql.conf 中 password_encryption_type = 1 ,表示支持 md5 和 sha256。
修改 pg_hba.conf 中加密算法

然后重启 openGauss:gs_ctl restart -D /opt/software/openGauss/data/single_node
连接到 openGauss 创建用户和数据库。

create database mydb;
CREATE USER tuser WITH PASSWORD '自己定义';
GRANT ALL PRIVILEGES TO tuser;
alter database mydb owner to tuser;

如果在修改加密方式前之前已经创建过用户了,需要在配置文件修改及数据库重启完成后,重新建用户或者设置用户密码。

3.4 示例

编写 python 文件

vi ogconn.py

将如下测试语句拷贝进去,根据实际情况修改对应的 openGauss 数据库连接信息。

import psycopg2
conn=psycopg2.connect(database="mydb",user="tuser",password="XXXXXXX",host="127.0.0.1",port=5432)
#或者用下面的也可以
#conn = psycopg2.connect("dbname=mydb user=tuser password=password host=localhost port=port")
print("Conn openGauss successfully")
cur=conn.cursor()
cur.execute("DROP TABLE IF EXISTS student")
cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")
cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Bob','M'))
cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Kevin','M'))
cur.execute('SELECT id,name,sex FROM student')
results=cur.fetchall()
print (results)
conn.commit()
cur.close()
conn.close()

连接测试

python3 ogconn.py

报错了,psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above

解决办法:
根据提示升级版本

rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install postgresql10-devel

根据提示输入 y, 等提示 Complete!
重新测试连接

注意,如果使用本地工具连接远端云服务器的数据库时,需要修改云服务器安全组,将 openGauss 的端口放开,否则会连接不上。

4. 常见报错

执行 python3 ogconn.py 报错
1. 提示如下错误
File “/opt/software/psycopg2/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above

这个错是说 libpq 版本应该在 10 以上,需要升级下版本。
解决办法:

rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install postgresql10-devel

根据提示输入 y, 等提示 Complete!

2. 提示如下错误:
psycopg2.OperationalError: none of the server’s SASL authentication mechanisms are supported
这个就是加密方式的问题,参考文章中 “创建数据库连接用户” 部分解决。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐