• Windows下python,psycopg2使用sm3连接HGDB


    瀚高数据库
    目录
    环境
    文档用途
    详细信息

    环境
    系统平台:N/A
    版本:4.5
    文档用途
    本文介绍在HGDB使用sm3认证时,python使用psycopg2连接HGDB的方法。

    详细信息
    Python连接HGDB可以使用psycopg2、Django,Django是依赖psycopg2的,底层用的都是libpq,pip安装的psycopg2自带libpq。因此在一般情况下pip安装psycopg2后可以直接连接HGDB。在一些情况下HGDB需要使用sm3密码认证方式,此时使用psycopg2自带的libpq是无法连接HGDB的,报错:“authentication method 13 not supported”;可以按照以下方式处理。

    Linux下psycopg2连接HGDB查阅文章:【python应用系统访问瀚高库(APP);ID:018380901】。

    Windows参考以下几个方法:

    方法一:更改数据库认证方式

    条件允许的情况下,将HGDB的认证方式由sm3改为md5;一定确认好是否可以修改,修改时必须仔细操作。

    方法二:自己编译psycopg2

    1)由于pip安装的psycopg2自带libpq,因此使用“pip install --no-binary :all: psycopg2”安装,使之不自带libpq,安装完毕后,使用HGDB提供的libpq动态库。

    2)将附件中的hgdb文件夹放在任意位置(路径建议只包含中文和数字),并配置环境变量,如:

    image.png

    cmd中验证pg_config可以访问到,如:

     C:\Users\Highgo>pg_config
    
        BINDIR = C:/Users/Highgo/highgo/bin
    
        DOCDIR = C:/Users/Highgo/highgo/doc
    
        HTMLDIR = C:/Users/Highgo/highgo/doc
    
        INCLUDEDIR = C:/Users/Highgo/highgo/include
    
        PKGINCLUDEDIR = C:/Users/Highgo/highgo/include
    
        INCLUDEDIR-SERVER = C:/Users/Highgo/highgo/include/server
    
        LIBDIR = C:/Users/Highgo/highgo/lib
    
        PKGLIBDIR = C:/Users/Highgo/highgo/lib
    
        LOCALEDIR = C:/Users/Highgo/highgo/share/locale
    
        MANDIR = C:/Users/Highgo/highgo/man
    
        SHAREDIR = C:/Users/Highgo/highgo/share
    
        SYSCONFDIR = C:/Users/Highgo/highgo/etc
    
        PGXS = C:/Users/Highgo/highgo/lib/pgxs/src/makefiles/pgxs.mk
    
        CONFIGURE = --enable-thread-safety --enable-nls --with-ldap --enable-FDE --enable-license --with-openssl --with-ossp-uuid --with-libxml --with-libxslt --with-perl
    
        VERSION = PostgreSQL 12.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3)安装Microsoft C++ Build Tools工具,用于源码构建psycopg2。vs_BuildTools下载地址:https://download.visualstudio.microsoft.com/download/pr/67cb4c13-1e6d-4bf5-97ed-93636beebd7d/bbd9e99e837140cc7838ec63d0609c5e63ff43001cfa1e558b48db235f015237/vs_BuildTools.exe;选择需要的组件,如下:

    1691655938059.png

    安装过程较长,所占空间比较大。

    4)卸载已安装的psycopg2;

    5)编译构建psycopg2;

    C:\Users\Highgo>pip install --no-binary :all: psycopg2
    
    Collecting psycopg2
    
      Using cached psycopg2-2.9.7.tar.gz (383 kB)
    
    Skipping wheel build for psycopg2, due to binaries being disabled for it.
    
    Installing collected packages: psycopg2
    
       Running setup.py install for psycopg2 ... done
    
    Successfully installed psycopg2-2.9.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6)将附件hgdb中的lib和bin下的文件全部复制到python安装目录下的$PYTHON_HOME\Lib\site-packages\psycopg2下,如:

    1691658583833.png

    7)重新打开cmd,测试python连接数据库,python脚本如下:

    import psycopg2
    
    conn = psycopg2.connect(
    
        host="192.168.17.75",
    
        port="5867",
    
        database="highgo",
    
        user="sysdba",
    
        password="password"
    
    )
    
    cur = conn.cursor()
    
    
    
    cur.execute("SELECT * FROM tbl_sm3")
    
    rows = cur.fetchall()
    
    for row in rows:
    
        print(row)
    
    
    
    cur.execute("INSERT INTO tbl_sm3 (c1, c2) VALUES (%s, %s)", ("1", "2"))
    
    conn.commit()
    
    cur.close()
    
    conn.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    8)测试:

    C:\Users\Highgo>cd C:\Users\Highgo\Python
    
    C:\Users\Highgo\Python>python testDB.py
    
    (1, '2')
    
    (1, '2')
    
    (1, '2')
    
    (1, '2')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    以上实现了sm3认证连接。

    9)常见报错

    UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u200e’ in position 13: ordinal not in range(128)

    解决:chcp 65001

  • 相关阅读:
    Flink 指定 keys 的几种方法
    Spring 更简单的读取和存储对象
    JAVA超市会员积分管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
    自动化任务调度,轻松管理海量数据采集项目
    用 Kafka + DolphinDB 实时计算 K 线
    RabbitMQ之消息模式简单易懂,超详细分享~~~
    unordered_set && unordered_map 的封装
    Ambari界面介绍
    家政预约小程序07服务分类展示
    微信小程序点击icon实现分享功能
  • 原文地址:https://blog.csdn.net/pg_hgdb/article/details/132740322