由于环境限制,PG需要同时连接、opengauss、gaussdb,由于使用的libpq版本不同,使用psycogp2连接无法使用。所以通过pyodbc
来解决。
下载gaussdb官方odbc驱动,地址: https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1660794000209/GaussDB_opengauss_client_tools.zip 找到相应版本的odbc驱动器
将odbc中的四个文件与python压缩包中的lib文件夹中的so文件复制到单个文件夹中 如下:
[root@test80 psycopg2-2.9.1]# ll /usr/local/lib/total 10052-rw-r--r-- 1 root root 18904 Jun 9 09:31 libcom_err_gauss.so.3-rw-r--r-- 1 root root 3210056 Jun 9 09:31 libcrypto.so.1.1-rw-r--r-- 1 root root 107032 Jun 9 09:31 libgcc_s.so.1-rw-r--r-- 1 root root 478216 Jun 9 09:31 libgssapi_krb5_gauss.so.2-rw-r--r-- 1 root root 161368 Jun 9 09:31 libgssrpc_gauss.so.4-rw-r--r-- 1 root root 304856 Jun 9 09:31 libk5crypto_gauss.so.3-rw-r--r-- 1 root root 1225928 Jun 9 09:31 libkrb5__gauss.so.3-rw-r--r-- 1 root root 73632 Jun 9 09:31 libkrb5support_gauss.so.0-rw-r--r-- 1 root root 417704 Jun 9 09:31 libpq.so.5.5-rw-r--r-- 1 root root 682488 Jun 9 09:31 libssl.so.1.1-rw-r--r-- 1 root root 2047472 Jun 9 09:31 libstdc++.so.6-rwxr-xr-x 1 root root 1263 Jun 9 09:12 psqlodbca.la-rwxr-xr-x 1 root root 744648 Jun 9 09:12 psqlodbca.so-rwxr-xr-x 1 root root 1263 Jun 9 09:12 psqlodbcw.la-rwxr-xr-x 1 root root 791368 Jun 9 09:12 psqlodbcw.so
修改ODBC配置文件将libpq等so文件复制到单个文件夹中,不与其它libpq混淆。
/etc/odbcinst.ini 内容如下:
[root@test80 psycopg2-2.9.1]# cat /etc/odbcinst.ini [ODBC Driver 17 for SQL Server]Description=Microsoft ODBC Driver 17 for SQL ServerDriver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.7.so.2.1UsageCount=1[GaussMPP]Description=HUAWEI ODBC Driver for GausDBriver64=/usr/local/lib/psqlodbcw.sosetup=/usr/local/lib/psqlodbcw.soDebug=0comlog=1usageCount=
测试>>> import pyodbc>>> connection = pyodbc.connect("DRIVER=GaussMPP;SERVER=60.60.60.227;DATABASE=postgres;UID=root;PWD=Gauss@1#3;PORT=8000")>>> cs = connection.cursor()>>> rs=cs.fetchall()>>> print(rs)[template1, 10, 0, 'C', 'C', '1', '1', -1, 12706, '0', 1663, 'MYSQL', '{=c/rdsAdmin,rdsAdmin=CTc/rdsAdmin}', 3, 1, 'PRC'), (template0, 10, 0, 'C', 'C', '1', '0', -1, 12706, '0', 1663, 'MYSQL', '{=c/rdsAdmin,rdsAdmin=CTc/rdsAdmin}', 3, 0, 'PRC'), ('postgres', 10, 0, 'C', 'C', '0', '1', -1, 12706, '0', 1663, 'MYSQL', '{=Tc/rdsAdmin,rdsAdmin=CTc/rdsAdmin,rdsBackup=c/rdsAdmin,rdsRepl=c/rdsAdmin,root=c/rdsAdmin,rdsMetric=c/rdsAdmin}', 3, 0, 'PRC')]
