Python连接达梦数据库并实现简单查询的完整指南
达梦数据库(DM Database)是中国自主研发的高性能关系型数据库系统,广泛应用于金融、政务、能源等关键行业。随着国产化替代的推进,越来越多开发者需要掌握如何在Python中连接和操作达梦数据库。本文将详细介绍使用Python连接达梦数据库的完整流程,并通过代码示例演示如何执行简单查询。
Python连接达梦数据库并实现简单查询的完整指南
达梦数据库(DM Database)是中国自主研发的高性能关系型数据库系统,广泛应用于金融、政务、能源等关键行业。随着国产化替代的推进,越来越多开发者需要掌握如何在Python中连接和操作达梦数据库。本文将详细介绍使用Python连接达梦数据库的完整流程,并通过代码示例演示如何执行简单查询。
一、环境准备
1. 安装达梦数据库
首先需在服务器或本地部署达梦数据库实例。可以从达梦官网下载安装包,并根据操作系统选择对应的版本(如Linux或Windows)。安装完成后,确保数据库服务已启动。
2. 安装Python依赖库
达梦数据库官方提供了dmPython库,支持Python 3.x版本。通过以下命令安装:
pip install dmPython
注意:安装前需确保系统已安装达梦数据库的客户端驱动(
libDmPython.so或dmPython.dll),并配置环境变量(如LD_LIBRARY_PATH)。
二、连接达梦数据库
1. 连接参数说明
连接达梦数据库需要以下关键参数:
- Host:数据库服务器IP地址。
- Port:数据库监听端口(默认5236)。
- Service Name:服务名(如
DAMENG)。 - Username:数据库用户名(如
SYSDBA)。 - Password:对应用户的密码。
2. 连接示例代码
import dmPython
# 连接达梦数据库
def connect_dm():
try:
conn = dmPython.connect(
host='127.0.0.1', # 数据库地址
port=5236, # 默认端口
user='SYSDBA', # 系统管理员账号
password='SYSDBA', # 初始密码
service_name='DAMENG' # 服务名
)
print("✅ 成功连接达梦数据库")
return conn
except Exception as e:
print(f"❌ 连接失败: {e}")
return None
三、执行简单查询
1. 查询单表数据
以查询系统自带的DMHR.EMPLOYEE表为例,演示如何获取结果集。
def query_data(conn):
try:
cursor = conn.cursor() # 创建游标
sql = "SELECT EMPLOYEE_ID, NAME, SALARY FROM DMHR.EMPLOYEE WHERE SALARY > 10000"
cursor.execute(sql) # 执行SQL
# 获取所有结果
results = cursor.fetchall()
for row in results:
print(f"员工ID: {row[0]}, 姓名: {row[1]}, 工资: {row[2]}")
cursor.close()
conn.close()
except Exception as e:
print(f"❌ 查询失败: {e}")
conn.rollback() # 回滚事务
2. 参数化查询
为防止SQL注入,推荐使用参数化查询方式:
def parameterized_query(conn, salary_threshold):
try:
cursor = conn.cursor()
sql = "SELECT NAME, SALARY FROM DMHR.EMPLOYEE WHERE SALARY > ?"
cursor.execute(sql, (salary_threshold,)) # 传入参数
results = cursor.fetchall()
for name, salary in results:
print(f"姓名: {name}, 工资: {salary}")
cursor.close()
except Exception as e:
print(f"❌ 参数化查询失败: {e}")
四、完整示例代码
import dmPython
def main():
# 连接数据库
conn = connect_dm()
if not conn:
return
# 查询数据
query_data(conn)
# 参数化查询示例
parameterized_query(conn, 15000)
if __name__ == "__main__":
main()
五、常见问题与解决方案
1. 连接失败
- 错误代码:
dmPython.DatabaseError: can't connect to database - 解决方法:
- 检查数据库服务是否启动(
dmserver进程是否存在)。 - 验证防火墙是否开放5236端口。
- 确认用户名和密码是否正确(默认
SYSDBA/SYSDBA)。
- 检查数据库服务是否启动(
2. 驱动缺失
- 错误提示:
libDmPython.so: cannot open shared object file - 解决方法:
- 将达梦客户端的
lib目录添加到系统路径:export LD_LIBRARY_PATH=/opt/dm8/lib:$LD_LIBRARY_PATH
- 将达梦客户端的
3. 查询结果为空
- 可能原因:
- 目标表中无符合条件的数据。
- 权限不足(需授予
SELECT权限):GRANT SELECT ON DMHR.EMPLOYEE TO SYSDBA;
六、性能优化建议
1. 使用连接池
频繁创建和关闭连接会消耗资源。可通过dmPython的连接池功能优化:
from dmPython import ConnectionPool
pool = ConnectionPool(mincached=2, maxcached=10)
conn = pool.getconn() # 从池中获取连接
2. 批量插入/更新
对于大量数据操作,使用executemany()方法提升效率:
data = [(f"John{i}", 20000) for i in range(100)]
cursor.executemany("INSERT INTO TEST(NAME, SALARY) VALUES (?, ?)", data)
七、总结
通过dmPython库,Python开发者可以无缝对接达梦数据库,实现高效的数据操作。本文从环境配置到代码实践,逐步演示了如何连接数据库并执行查询。对于实际项目,建议结合连接池、参数化查询和事务管理,确保系统的稳定性和安全性。随着国产数据库的普及,掌握达梦数据库的使用技能将成为开发者的重要竞争力。
扩展阅读:
- 达梦数据库官方文档:https://eco.dameng.com/
- Python数据库API标准(PEP 249):https://peps.python.org/pep-0249/
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)