windows环境下python连接openGauss数据库

本文介绍Python语言特性及其在Windows平台的安装配置过程,并详细阐述如何使用Psycopg2连接器来连接openGauss数据库,包括Psycopg2的下载安装、Python脚本编写及常见问题解答。
该文章已生成可运行项目,

一、python 介绍

python最新版
windows python是款面向对象、直译式计算机程序设计语言,同时也是一种功能强大而完善的通用型语言,具有非常简洁而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。

Python特殊功能

  • 很清楚、明确、易读的语法
  • 较强的自省能力
  • 直观的面向对象
  • 自然的表达程序代码
  • 完整的模块化设计,支持分层包
  • 基于异常的错误处理
  • 非常高的水平动态数据类型
  • 几乎每一个任务的广泛的标准库和第三方模块
  • 扩展和模块很容易写在C,C + +(或Java的Jython或NET语言IronPython的)
  • 嵌入在应用程序中作为脚本接口

Python 软件亮点

  • 完全模块化,Python核心编程软件支持分层包
  • 基于异常的错误处理
  • 非常高级别的动态数据类型
  • 广泛的标准库和第三方模块,Python核心编程软件几乎被用于每个任务
  • 扩展和模块易于使用C,C ++(或Jython Java,或IronPython的.NET语言)
  • 可嵌入应用程序作为脚本界面

Python说明
Python是一个解释性语言,因为不需要编译和连接所以能节省大量的程序开发时间。解释程序可以交互使用,这样可以可以很容易地试验语言的各种特色,写只用一次的程序,或在从底向上程序开发中测试函数。它也是一个方便的计算器。

Python是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多。

Python可用于的操作系统:Windows和Linux / Unix系统,OS / 2,Mac上,Amiga上,其中包括。甚至有NET和Java虚拟机上运行,Python的实现是一个开源许可证,使得它可以自由使用和分派下,甚至用于商业用途。

二、Python下载及安装

1、下载: 进入python官网下载(https://www.python.org/)。鼠标指向Downloads(不用点击)会弹出下拉框,直接点击windows下的Python 3.11.0即可下载。(国外网站下载较慢,建议找个国内的资源下载)

在这里插入图片描述

2、下载好之后,右键以管理员身份运行exe可执行文件。

这里勾选Add Python 3.11 to PATH (把Python的安装路径添加到系统环境 变量的Path变量中,如果不选那就需要自己配置环境变量了,参见FAQ) ,Install Now 默认安装,Customize installation 自定义安装。
在这里插入图片描述

这里选自定义安装,安装Python文档、Python的pip等…默认即可,直接next
在这里插入图片描述

路径可以更改一下:
在这里插入图片描述

自动安装中……
在这里插入图片描述

最后点这里(红圈处)。
在这里插入图片描述

安装完成。
在这里插入图片描述

打开(cmd)终端窗口,输入python命令,进行验证,看到相关版本信息,即表示安装成功。
在这里插入图片描述

打开(cmd)终端窗口,输入pip 命令,验证环境变量是否配置成功。
在这里插入图片描述

下载并安装模块:打开cmd窗口,键入命令 pip install requests 进行安装,使用pip list命令查看是否已经安装模块。
在这里插入图片描述

三、openGauss Connectors (Psycopg2) 介绍

Psycopg是一种用于执行SQL语句的PythonAPI,可以为PostgreSQL、openGauss数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPY TO/COPY FROM”功能。支持多种类型Python开箱即用,适配PostgreSQL数据类型;通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2兼容Unicode和Python 3。

openGauss数据库提供了对Psycopg2特性的支持,并且支持Psycopg2通过SSL模式链接。

四、openGauss Connectors (Psycopg2)下载并初始化

登录openGauss社区(https://opengauss.org/zh/download/)下载对应的openGauss数据库连接器(本测试环境下载的是Python-psycopg2_2.1.0,版本与数据版本匹配)。
在这里插入图片描述

从发布包中获取,包名为openGauss-xxxx-操作系统版本号-64bit-Python.tar.gz。解压后有两个文件夹:psycopg2库文件和lib库文件。
在这里插入图片描述

将psycopg2拷贝到python安装目录的第三方包文件夹(即site-packages目录)下。
在这里插入图片描述

将lib文件夹中的文件拷贝到安装目录Lib目录下。
在这里插入图片描述

对于非数据库用户,需要将解压后的lib目录,配置在LD_LIBRARY_PATH环境变量中(参考FAQ)。
在这里插入图片描述

下载并安装模块:打开cmd窗口,键入命令pip install psycopg2
在这里插入图片描述

五、连接并访问openGauss数据库

前置条件:openGauss数据库已成功安装、并成功启动。
在这里插入图片描述

编辑好python文件,并保存。(本测试脚本功能主要实现链接openGauss数据库、创建表、插入数据、查询数据等)
在这里插入图片描述

附原脚本:

#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database="postgres", user="omm2", password="P@ssw0rd123", host="192.168.52.3", port="26000")

cur = conn.cursor()

#创建表COMPANY1
cur.execute('''CREATE TABLE COMPANY1
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);''')
       
#插入数据       
cur.execute("INSERT INTO COMPANY1 (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

cur.execute("INSERT INTO COMPANY1 (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

cur.execute("INSERT INTO COMPANY1 (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

cur.execute("INSERT INTO COMPANY1 (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");       
      
#查询结果
cur.execute("SELECT id, name, address, salary  from COMPANY1")
rows = cur.fetchall()
for row in rows:
   print("ID = ", row[0])
   print("NAME = ", row[1])
   print("ADDRESS = ", row[2])
   print("SALARY = ", row[3])

conn.commit()
conn.close()

执行python脚本:打开(cmd)终端窗口, 执行命令“python new2.py”,如下截图。
在这里插入图片描述

如上出现以上结果, 则表示python链接openGauss数据库成功,执行创建表、插入数据、查询数据成功。

六、问题总结(FAQ)

1、python 环境变量配置参考:
在这里插入图片描述

2、打开(cmd)终端窗口,输入pip,遇到:‘pip’不是内部或外部命令,也不是可运行的程序或批处理文件。即下图这种情况:
在这里插入图片描述

解决办法:添加环境变量。复制python安装目录 Scripts的路劲, 调价到 Path下(参考上文python安装时配置环境变量的图示)。

3、在执行python脚本时,如果报错:ModuleNotFoundError:No module named ‘psycopg2._psycopg’。 则需要执行pip install psycopg2 命令, 下载安装模块。

4、在链接openGauss数据库时,提示:Forbid remote connection with initial user ,意思是禁止用初始用户进行远程连接,即不要使用数据库默认的omm用户访问。

5、Psycopg(接口)参考
Psycopg接口是一套提供给用户的API方法。

1)psycopg2.connect() :此方法创建新的数据库会话并返回新的connection对象。
原型:
conn=psycopg2.connect(dbname=“test”,user=“postgres”,password=“secret”,host=“127.0.0.1”,port=“5432”)

返回值:connection对象(连接openGauss数据库实例的对象)。
参数 :
关键字 参数说明
dbname 数据库名称。
user 用户名。
password 密码。
host 数据库IP地址,默认为UNIX socket类型。
port 连接端口号,默认为5432。
sslmode ssl模式,ssl连接时用。
sslcert 客户端证书路径,ssl连接时用。
sslkey 客户端密钥路径,ssl连接时用。
sslrootcert 根证书路径,ssl连接时用。

2)connection.cursor():此方法用于返回新的cursor对象。
原型:
cursor(name=None, cursor_factory=None, scrollable=None, withhold=False)

返回值 :cursor对象(用于整个数据库使用Python编程的cursor)。
参数 :
关键字 参数说明
name cursor名称,默认为None。
cursor_factory 用于创造非标准cursor,默认为None。
scrollable 设置SCROLL选项,默认为None。
withhold 设置HOLD选项,默认为False。

3)cursor.execute(query,vars_list) :此方法执行被参数化的SQL语句(即占位符,而不是SQL文字)。psycopg2模块支持用%s标志的占位符。

原型
curosr.execute(query,vars_list)

参数:
关键字 参数说明
query 待执行的sql语句。
vars_list 变量列表,匹配query中%s占位符。

4)cursor.fetchall():此方法获取查询结果的所有(剩余)行,并将它们作为元组列表返回。
原型:
cursor.fetchall()

5)connection.commit():此方法将当前挂起的事务提交到数据库。注意: 默认情况下,Psycopg在执行第一个命令之前打开一个事务:如果不调用commit(),任何数据操作的效果都将丢失。
原型:
connection.commit()

6)connection.close():此方法关闭数据库连接。注意: 此方法关闭数据库连接,并不自动调用commit()。如果只是关闭数据库连接而不调用commit()方法,那么所有更改将会丢失。
原型:
connection.close()

本文章已经生成可运行项目
错误代码 `-1073741819 (0xC0000005)` 是 Windows 系统中的 **访问违规异常(Access Violation)**,即程序试图访问未分配或受保护的内存地址。在 Python 调用 JAR 包连接 openGauss 数据库时出现这个错误,通常意味着 **JVM 崩溃**,常见于通过 `JPype` 或 `py4j` 等桥接工具调用 Java 代码时。 --- ### ✅ 可能原因分析 1. **Java 和 Python 架构不匹配** - Python 是 64 位,而 JDK 是 32 位(或反之) - 导致 JPype 在启动 JVM 时崩溃 2. **JDK 版本与 openGauss JDBC 驱动不兼容** - openGauss 官方推荐使用 OpenJDK 8 - 使用过高版本(如 JDK 17)可能导致驱动加载失败 3. **JDBC 驱动版本不匹配** - 使用了错误版本的 `gaussdb-jdbc.jar` 4. **缺少必要的 DLL 或依赖库** - 尤其是 Windows 上缺少 Visual C++ 运行库等系统依赖 5. **JPype 初始化配置错误** - JVM 参数设置不当,比如堆内存过大、路径错误等 6. **openGauss 服务端未开启或网络不通** - 虽然不会直接导致 0xC0000005,但可能间接引发底层异常 --- ### ✅ 解决方案:使用 `JPype1` 调用 GaussDB JDBC 驱动连接 openGauss #### ✅ 步骤一:环境准备 确保: - Python 为 64 位 - JDK 为 **OpenJDK 8(64位)** - 下载正确的 JDBC 驱动:[openGauss 官网下载页](https://opengauss.org/zh/download.html) → 选择对应版本的 `gaussdb-jdbc-xxx.jar` > 推荐使用 `gaussdb-jdbc-3.0.0.jar` 或更新稳定版 #### ✅ 步骤二:安装依赖 ```bash pip install jpype1 ``` #### ✅ 步骤三:Python 调用代码示例 ```python import jpype import jpype.dbapi2 as dbapi2 def connect_opengauss_with_jar(): # JDK 路径(必须是 64 位且与 Python 一致) jvm_path = jpype.getDefaultJVMPath() print("JVM Path:", jvm_path) # JDBC JAR 文件路径 jar_path = "path/to/gaussdb-jdbc-3.0.0.jar" # 修改为实际路径 # 启动 JVM if not jpype.isJVMStarted(): jpype.startJVM( jvm_path, "-ea", f"-Djava.class.path={jar_path}", convertStrings=True ) try: # 加载驱动类 jpype.JClass("org.opengauss.Driver") # JDBC URL(根据你的环境修改) url = "jdbc:opengauss://127.0.0.1:5432/postgres?user=your_user&password=your_password&currentSchema=public" # 使用 JPype 的 dbapi2 工具连接 conn = dbapi2.connect(url) cursor = conn.cursor() # 执行 SQL 示例 cursor.execute("SELECT version()") result = cursor.fetchone() print("Database Version:", result[0]) cursor.close() conn.close() except Exception as e: print("Error:", e) raise finally: # 关闭 JVM if jpype.isJVMStarted(): jpype.shutdownJVM() # 调用函数 connect_opengauss_with_jar() ``` --- ### 🔍 代码解释 | 代码段 | 说明 | |-------|------| | `jpype.getDefaultJVMPath()` | 自动获取当前系统的 JVM 路径,确保与 Python 架构一致 | | `startJVM(..., "-Djava.class.path=..." )` | 指定 JDBC 驱动 JAR,让 JVM 能找到 Driver 类 | | `jpype.JClass("org.opengauss.Driver")` | 显式加载 openGauss 驱动类 | | `dbapi2.connect(url)` | 使用标准 DB API 连接数据库,简化操作 | | `shutdownJVM()` | 必须关闭 JVM,避免资源泄漏 | --- ### ✅ 排查建议 1. **检查架构一致性** ```python import platform print(platform.architecture()) # 应为 ('64bit', 'WindowsPE') ``` JDK 也必须是 64 位。 2. **验证 JDK 版本** ```bash java -version ``` 推荐输出: ``` openjdk version "1.8.0_302" ``` 3. **测试 JAR 是否可独立运行** 写一个简单的 Java 程序测试该 JAR 是否能连接成功,排除 JAR 本身问题。 4. **查看崩溃日志** - JVM 崩溃会生成 `hs_err_pid*.log` 文件(在程序运行目录) - 查看该文件确认崩溃原因(如 missing DLL、SIGSEGV 等) 5. **添加调试参数** 在 `startJVM` 中加入: ```python "-Xmx512m", "-verbose:jni", "-XX:+PrintGCDetails" ``` 观察是否有内存或 JNI 错误。 6. **替换为纯 Python 方案(替代方案)** 如果持续崩溃,建议改用 **ODBC + pyodbc**: - 安装 openGauss ODBC 驱动 - 使用 `pyodbc.connect("DRIVER={openGauss};SERVER=...")` --- ### ❓相关问题
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gauss松鼠会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值