使用Psycopg连接数据库
Psycopg是一种用于执行SQL语句的PythonAPI,可以为GaussDB数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPY TO/COPY FROM”功能。支持多种类型Python开箱即用,适配GaussDB数据类型。通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2兼容Unicode。
GaussDB数据库提供了对Psycopg2特性的支持,并且支持psycopg2通过SSL模式连接。
操作系统 |
平台 |
Python版本 |
---|---|---|
EulerOS V2.0SP5 |
|
3.8.5 |
EulerOS V2.0SP9 |
|
3.7.4 |
EulerOS V2.0SP10、Kylin v10、UnionTech20 |
|
3.7.9 |
EulerOS V2.0SP11、Suse 12.5 |
|
3.9.11 |
Huawei Cloud EulerOS 2.0 |
|
3.9.9 |
psycopg2在编译过程中,会链接(link)GaussDB的openssl,GaussDB的openssl与操作系统自带的openssl可能不兼容。如果遇到不兼容现象,例如提示"version 'OPENSSL_1_1_1f' not found",请使用环境变量LD_LIBRARY_PATH进行隔离,以避免混用操作系统自带的openssl与GaussDB依赖的openssl。
例如,在执行某个调用psycopg2的应用软件client.py时,将环境变量显性赋予该应用软件:
export LD_LIBRARY_PATH=/path/to/gaussdb/libs:$LD_LIBRARY_PATH python client.py
其中,/path/to/pyscopg2/lib 表示GaussDB依赖的openssl库所在目录,需根据文件实际存储路径修改。
前提条件
本地已安装python语言运行环境。
连接数据库
- 准备相关驱动和依赖库。可以从发布包中获取,包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Python.tar.gz。
解压后有两个文件夹:
- psycopg2:psycopg2库文件。
- lib:lib库文件。
- 加载驱动。
- 在使用驱动之前,需要做如下操作:
- 先解压版本对应驱动包。
tar zxvf xxxx-Python.tar.gz
- 使用root用户将psycopg2复制到python安装目录下的site-packages文件夹下。
su root cp psycopg2 $(python3 -c 'import site; print(site.getsitepackages()[0])') -r
- 修改psycopg2目录权限为755。
chmod 755 $(python3 -c 'import site; print(site.getsitepackages()[0])')/psycopg2 -R
- 将psycopg2目录添加到环境变量$PYTHONPATH,并使之生效。
export PYTHONPATH=$(python3 -c 'import site; print(site.getsitepackages()[0])'):$PYTHONPATH
- 对于非数据库用户,需要将解压后的lib目录,配置在LD_LIBRARY_PATH中。
export LD_LIBRARY_PATH=path/to/lib:$LD_LIBRARY_PATH
- 先解压版本对应驱动包。
- 在创建数据库连接之前,需要先加载如下数据库驱动程序:
1
import psycopg2
- 在使用驱动之前,需要做如下操作:
- 连接数据库。
非SSL方式连接数据库:
- 使用psycopg2.connect函数获得connection对象。
- 使用connection对象创建cursor对象。
SSL方式连接数据库:
用户通过psycopy2连接GaussDB服务器时,可以通过开启SSL加密客户端和服务器之间的通讯。在使用SSL时,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参见Openssl相关文档和命令。
- 使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
- 在连接选项中添加SSL连接相关参数:sslmode、sslcert、sslkey、sslrootcert。
- sslmode:可选项见表2。
- sslcert:客户端证书路径。
- sslkey:客户端密钥路径。
- sslrootcert:根证书路径。
- 使用psycopg2.connect函数获得connection对象。
- 使用connection对象创建cursor对象。
使用SSL安全连接数据库,需保证所使用的python解释器为生成动态链接库(.so)文件的方式编译,可通过如下步骤确认python解释器的连接方式。
- 在python解释器命令行中输入import ssl,导入SSL。
- 执行ps ux查询python解释器运行的pid(假设pid为******)。
- 在shell命令行中执行pmap -p ****** | grep ssl,查看返回结果中是否包含libssl.so的相关路径。如果有,则python解释器为动态链接方式编译。