文章目录
前言
使用爬虫等操作的最终目的是存入数据库方便日后处理,这就涉及到一个新的模块:cx_Oracle
一、cx_Oracle下载
下载地址:cx_Oracle 8.1.0
因为我使用的是python3.8,电脑为windows64位,所以选择了cx_Oracle-8.1.0-cp38-cp38-win_amd64.whl (212.1 kB)
二、cx_Oracle安装
1.解压文件后扔到python安装目录下
注意是三个文件!三个文件!三个文件!
处理完后执行语句发现错误提示:“ModuleNotFoundError: No module named 'cx_Oracle
”
在命令提示符输入“pip install cx_Oracle”:
2.下载dll文件扔到python安装目录下
产生上述问题后,在网上查找一圈推测是Oracle问题
其实是因为第一步只放了两个文件到site-packages,后来测试发现没有这三个dll文件也可以正常运行,为避免产生其他未知问题,建议还是下载放入dll文件
没有找到三个dll文件,直接找到对应版本在网上下载:instantclient-basic-windows.x64-11.2.0.4.0.zip
3.其他
连接数据库时提示“cx_Oracle.DatabaseError: ORA-12541: TNS: 无监听程序
”
原因:主要是因为默认情况下,Oracle的监听只监听本地主机连接
解决方法:将Oracle设置为监听所有IP地址
具体步骤:
(1)找到Oracle安装路径下的listener.ora文件
(2)修改“HOST = localhost”为“HOST = 0.0.0.0”
(3)我的电脑右键“管理”打开服务器,找到Oracle组件重启
三、使用方法
1.连接数据库
# -*- coding: UTF-8 -*-
import cx_Oracle # 导入cx_Oracle模块
conn = cx_Oracle.connect('用户名','密码','数据库名') #连接数据库
如果想要以管理员身份登录,直接操作会提示错误信息“cx_Oracle.DatabaseError: ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
”,应使用如下语句:
conn = cx_Oracle.connect('管理员账号', '密码', '数据库名',mode=cx_Oracle.SYSDBA)
2.执行sql语句
execute():执行sql语句
#执行sql语句
d1 = cur.execute("select * from tuser")
或者
sql="select * from system.tuser"
d1 = cur.execute(sql)
值得注意的是:使用管理员账号登录时,直接使用“select * from tuser”报错:“cx_Oracle.DatabaseError: ORA-00942: 表或视图不存在
”,这是因为表是属于用户的,要以“用户名.表名”的形式查询
3.输出结果
fetchall():一次返回所有的结果集
fetchone():一次返回一行
cur =conn.