基于Psycopg开发
Psycopg是一种用于执行SQL语句的PythonAPI,可以为PostgreSQL、openGauss数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPY TO/COPY FROM”功能。支持多种类型Python开箱即用,适配PostgreSQL数据类型;通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2兼容Unicode和Python 3。
openGauss数据库提供了对Psycopg2特性的支持,并且支持Psycopg2通过SSL模式链接。
表 1 Psycopg支持平台
Psycopg包
从发布包中获取,包名为openGauss-xxxx-操作系统版本号-64-Python.tar.gz。
解压后有两个文件夹:
- psycopg2:psycopg2库文件。
- lib:lib库文件。
开发流程
加载驱动
-
在使用驱动之前,需要做如下操作:
- 先解压版本对应驱动包,使用root用户将psycopg2拷贝到python安装目录下的site-packages文件夹下。
- 修改psycopg2目录权限为755。
- 将psycopg2上层目录添加到环境变量$PYTHONPATH,并使之生效。
- 对于非数据库用户,需要将解压后的lib目录,配置在LD_LIBRARY_PATH中。
-
在创建数据库连接之前,需要先加载如下数据库驱动程序:
import psycopg2
连接数据库
- 使用psycopg2.connect函数获得connection对象。
- 使用connection对象创建cursor对象。
执行SQL语句
- 构造操作语句,使用%s作为占位符,执行时psycopg2会用参数值智能替换掉占位符。可以添加RETURNING子句,来得到自动生成的字段值。
- 使用cursor.execute方法来操作一行,使用cursor.executemany方法来操作多行。
处理结果集
- cursor.fetchone():这种方法提取查询结果集的下一行,返回一个序列,没有数据可用时则返回空。
- cursor.fetchall():这种方法获取所有查询结果(剩余)行,返回一个列表。空行时则返回空列表。
关闭连接
在使用数据库连接完成相应的数据操作后,需要关闭数据库连接。关闭数据库连接可以直接调用其close方法,如connection.close()。
注意: 此方法关闭数据库连接,并不自动调用commit()。如果只是关闭数据库连接而不调用commit()方法,那么所有更改将会丢失。
连接数据库(SSL方式)
用户通过psycopy2连接openGauss服务器时,可以通过开启SSL加密客户端和服务器之间的通讯。在使用SSL时,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参考Openssl相关文档和命令。
-
使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
文件内容如下:
[opengauss] host=localhost database=postgres user=omm password=test
-
在连接选项中添加SSL连接相关参数:sslmode、sslcert、sslkey、sslrootcert。
a. sslmode:可选项见表1。
b. sslcert:客户端证书路径。
c. sslkey:客户端密钥路径。
d. sslrootcert:根证书路径。 -
使用psycopg2.connect函数获得connection对象。
from configparser import ConfigParser import psycopg2 parser = ConfigParser() parser.read('database.ini') parameters = dict() for parameter, value in parser.items('opengauss'): parameters[parameter] = value connection = psycopg2.connect(**parameters)
-
使用connection对象创建cursor对象。
cursor = connection.cursor()
表 1 sslmode的可选项及其描述