说明
由于环境限制,需要同时连接PG、opengauss、gaussdb,使用psycogp2连接由于使用的libpq的版本不同导致无法使用。所以就通过pyodbc
来解决。
配置ODBC
下载、上传驱动
下载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
这里将libpq等so文件复制到单独文件夹内,不和其他libpq混淆。
修改ODBC配置文件
/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 Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.7.so.2.1
UsageCount=1
[GaussMPP]
Description=HUAWEI ODBC Driver for GaussDB
Driver64=/usr/local/lib/psqlodbcw.so
setup=/usr/local/lib/psqlodbcw.so
Debug=0
CommLog=1
UsageCount=1
测试
>>> 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()
>>> cs.execute("select * from pg_database")
>>> 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')]