使用Python2.7连接oracle11(解决中文乱码问题)

本文详细介绍了在Windows环境下,如何使用Python2.7与Oracle11gR2进行数据库连接和操作,包括环境配置、TNS配置、字符集设置及编码问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

太难配置了,一个不小心就乱码,记录一下

 

环境:

客户机:windows10 + python 2.7 64bit + instantclient-basic 64bit

服务器:OLE 5.3 32bit + Oracle11gR2 32bit

 

因为Python是64bit的,所以windows中Oracle的Client组件也要是64bit的。

因为OEL服务器中Oracle版本是11gR2,所以Windows中Client组件也要是11gR2的。

 

使用pip安装Oracle的python包(如果安装不上,使用管理员权限安装)。

pip install cx_Oracle

下载windows中Client组件。(instantclient-basic-windows.x64-11.2.0.4.0.zip)

下载地址:https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

解压到文件夹,我的是E:\Oracle\instantclient_11_2\。

设置系统环境变量Path

查询OEL服务器中Oracle的语言。

在windows中设置NLS_LANG环境变量。

windows中配置TNS,保存在E:\Oracle\TNS_ADMIN\tnsnames.ora。

# Generated by Oracle configuration tools.

实例名 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = OEL服务器地址)(PORT = Oralce端口号))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 服务名)
    )
  )

windows中配置TNS_ADMIN环境变量。

重启windows,使环境变量生效。

 

使用SecureCRT 8.0.0 64bit连接OEL,修改字符集(这里一定要改,不然录入的中文数据编码有问题,后面使用代码读出来的数据,转换也会有问题)。

可以直接远程OEL并录入中文数据,而且不会乱码。

 

编写python代码

# -*- coding:utf-8 -*-

import socket
import cx_Oracle
# python2.7环境默认不是utf-8,修改默认环境utf-8,最前面的那个表示使用utf-8格式保存代码(好像是)
import sys
reload(sys)
sys.setdefaultencoding('utf8')

szUsername = '连接Oracle的用户名'
szPasswd = '连接Oracle的密码'
szHostname = 'OEL服务器的域名'
szPort = '端口号'
szInstance = '实例名'

# sql语句,这里我有个site表(id, name, address),name字段用的nvarchar2(15)类型
id = 20
# 插入的数据需要转换
name = '公司'.decode('utf8').encode('gbk')
# 插入数据
sql1 = "insert into site(id, name, address) values(%d, '%s', '%s')" % (id, name, '')
# 提交
sql2 = "commit"
# 查询插入的数据
sql3 = "select * from site where id = %d" % (id)

# 把OEL域名解析成IP
szIPAddr = socket.getaddrinfo(szHostname, None)[0][4][0]

db = cx_Oracle.connect(szUsername, szPasswd, szIPAddr + ':' + szPort + '/' + szInstance)
cursor = db.cursor()

# 插入数据
cursor.execute(sql1)
# 提交
cursor.execute(sql2)
# 查询插入的数据
cursor.execute(sql3)
# 得到返回结果
sqlRet = cursor.fetchall()

# 打印结果此时看到的中文数据为u'\u****\u****'
print sqlRet
# 转换中文数据为GBK
print sqlRet[0][1].encode('gbk')

cursor.close()
db.close()

 

<think>嗯,用户这次明确询问DataX的安装部署方法,看来是个急需落地的技术需求。之前系统要求生成相关问题时我提过环境准备和配置验证,正好这次可以展开成完整指南。用户可能是运维或数仓工程师,语气直接且带着"指南"这样的关键词,说明需要标准化流程。DataX作为阿里开源的离线数据同步工具,安装其实很轻量,但部署细节容易踩坑。记得上次在回答里提过JDK和Python版本要求,这次得放在前置条件强调,特别是企业环境常有jdk1.7的历史遗留问题。用户没提具体操作系统,但CentOS最常见,所以脚本示例都用yum;如果ta用Ubuntu还得补充apt-get方案。安装包获取要给出官方GitHub和镜像站双路径,国内用户很可能访问不了GitHub。解压后目录结构需要解释清楚,尤其注意plugin目录的插件机制——很多人第一次用会困惑为什么mysql同步失败,其实是缺对应读写插件。验证环节特别重要,我决定用stream2stream和mysql2mysql两个例子。前者纯粹测试核心组件,后者覆盖真实场景,但mysql连接部分得提醒用户替换实际参数。看到有些教程漏了charset配置导致中文乱码,这个坑必须写在备注里。用户上次没问但应该需要的后续要点,写成相关问题最合适:性能优化涉及JVM调优和错误处理,这在全量同步TB级数据时是刚需;Web平台则是团队协作痛点。最后补上官方文档链接,毕竟版本更新可能带来变化。对了,所有代码框和路径名要用反引号标注,系统要求的技术文档规范得遵守。Python那句import测试很多人会忽略,但这是检测py环境正确性的关键步骤,得加粗强调。</think> 以下是DataX的完整安装部署指南,基于官方文档整理并验证最佳实践: ### 前置条件 1. **环境要求** - JDK 1.8+(需配置`JAVA_HOME`环境变量) ```bash java -version # 验证版本 echo $JAVA_HOME # 验证路径 ``` - Python 2.7(仅用于配置解析,3.x版本不兼容) 2. **安装包获取** 官方下载地址(推荐镜像加速): ```bash wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz ``` ### 安装步骤 1. **解压安装包** ```bash tar -zxvf datax.tar.gz -C /opt/ # 解压到指定目录 ``` 2. **目录结构说明** ``` /opt/datax ├── bin # 启动脚本 ├── conf # 全局配置 ├── lib # 核心依赖库 ├── plugin # 读写插件(按需扩展) └── job # 任务配置模板 ``` ### 部署验证 1. **运行测试任务** ```bash cd /opt/datax/bin python datax.py ../job/job.json # 执行示例任务 ``` 2. **验证标准输出** 成功日志会显示: ``` [任务结束状态]:成功 [平均流量]:xxx KB/s ``` ### 快速通道示例 1. **Stream -> Stream测试** ```json { "job": { "content": [{ "reader": {"name": "streamreader"}, "writer": {"name": "streamwriter"} }] } } ``` 2. **MySQL同步示例** ```json "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "***", "column": ["id","name"], "connection": [{ "jdbcUrl": ["jdbc:mysql://db_host:3306/test?useSSL=false"], "querySql": ["SELECT * FROM test_table"] }] } } ``` > **重要提示** > - 插件依赖:若使用MySQL/Oracle等插件,需将对应驱动JAR包放入`plugin/reader|writer`目录[^2] > - 内存调整:大任务需修改`bin/datax.py`中的`-Xms -Xmx`参数 > - 编码问题中文环境建议在job.json中添加`"-Dfile.encoding=UTF-8"` --- ### ‼️ 常见问题排查 | 问题现象 | 解决方案 | |------------------------|----------------------------| | Python版本报错 | 安装`python2`并创建软链接 | | 插件ClassNotFound | 检查驱动JAR包完整性 | | 数据库连接超时 | 配置`connectionTimeout`参数 | | 空表任务失败 | 配置`skipEmpty`参数为true | [^1]: DataX官方GitHub文档:https://github.com/alibaba/datax [^2]: 插件依赖规范详见`plugin`目录README.md文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值