此篇文章主要是记录一下第一次使用 Python 的的库连接使用 oracle。
如下是目录:
- 安装下载依赖 cx_Oracle
- 下载安装客户端及配置环境
- 连接方式
- 插入数据
- 简单基本语句
1、安装依赖 cx_Oracle
使用 pip install 的命令下载这个依赖,使用国内镜像源会快一点,所以使用如下语句,指定镜像地址:
pip3 install cx_Oracle==6.4.1 -i https://mirrors.aliyun.com/pypi/simple/
2、下载安装客户端及配置环境
首先要说一点的是,我在两种机器上都试过,一个是 Mac,一个是 Linux,在 Mac 上按照教程啥的都安装 OK,环境变量啥的也都弄了,但是,总是时好时坏,不知道是不是姿势不太对。
所以,我就换到了 Linux ,用 Linux 一次安装,永久生效,无敌!!!
Linux 牛逼!!!
所以接下来说的是在 Linux 上的安装步骤,其实和 Mac 上的步骤差不多,但是效果不太一样。
首先,下载客户端,去官方网站下载客户端:
https://www.oracle.com/database/technologies/instant-client/downloads.html
比如我需要下载的是 Linux 版本,所以选择的是这个 zip 包:
解压缩
将下载的文件放到系统的 /home/user/ 目录下(这里可以随便放,可以放到任何有权限的地方),解压缩,然后就可以得到一个 文件名类似于 instantclient_19_8 的文件夹。
配置环境变量
在用户目录下的 .bash_profile 文件中添加如下代码:
# /home/hunter/.bash_profile
export ORACLE_HOME=/home/jumpserver/instantclient_19_8/
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH
3、连接方式
使用 cx_Oracle 连接 Oracle 跟使用 pymysql 模块连接 MySQL 的方式差不多,需要用到 ip、port、username、password、service 等参数,以下是连接 Oracle 的方式:
import cx_Oracle
class OracleConnect(object):
host = '127.0.0.1:1521'
username = 'user'
password = 'password'
service = 'service_name'
conn_str="%s/%s@%s/%s” % (OracleConnect.username, OracleConnect.password, OracleConnect.host, OracleConnect.service)
oracle_conn = cx_Oracle.connect(conn_str)
cursor = oracle_conn.cursor()
如果输入上述语句,没有报错,那么说明环境配置是 OK 的,并且 Oracle 数据库连接也没问题,接下来就可以搞事情了。
4、插入数据
在 Python 中插入 Oracle 的语法和插入 MySQL 的语法是不太一样的,我觉得比较好用的,也是我之前用到的方法,就是直接使用 executemany() 方法,无论是单条数据,还是多条数据,都使用这个方法。
比如数据表名为 BOOK_TABLE,有 BOOK_NAME、AUTHOR 两个字段。
现在要往里面插入如下几条数据:
data = (('挪威的森林', '村上春树'),
('顾城的诗', '顾城'),
('北野武的小酒馆', '北野武'))
在 cx_Oracle 中使用的插入多条数据的使用方法如下:
insert_sql = "INSERT INTO BOOK_TABLE (BOOK_NAME, AUTHOR) VALUES(:1, :2)"
cursor.executemany(insert_sql, data)
oracle_conn.commit()
然后使用 SELECT 语句就可以查到插入的数据。
关于插入中文的问题
如果在上述过程中,发现报错,说什么 acsii 码之类的问题,意料之中,哈哈哈哈哈哈,需要在脚本的前面指定一下编码:
import os
os.environ['LANG'] = "zh_CN.UTF-8"
os.environ['NLS_LANG'] = "SIMPLIFIED CHINESE_CHINA.UTF8"
5、简单基本语句
Oracle 和 MySQL 的一些基本语句是相同的,比如 SELECT、TRUNCATE等操作。
(其他的我也没用过,也不想了解了。。。。)