cx_Oracle使用方法

2023-10-28

正确安装好cx_oracle之后,要使用它来连接到oracle数据库进行操作,具体应该分3步走:

第一步:导入cx_Oracle ,建立连接

>>> import cx_Oracle      # 导入模块
>>> db = cx_Oracle.connect('hr', 'hrpwd', 'localhost:1521/XE') 建立连接,3 个参数分开写
>>> db1 = cx_Oracle.connect('hr/hrpwd@localhost:1521/XE') 建立连接,3 个参数连写
>>> dsn_tns = cx_Oracle.makedsn('localhost', 1521, 'XE')
>>> print dsn_tns
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
(CONNECT_DATA=(SID=XE)))
>>> db2 = cx_Oracle.connect('hr', 'hrpwd', dsn_tns)
>>> print db.version


10.2.0.1.0

>>> versioning = db.version.split('.')

>>> print versioning

['10', '2', '0', '1', '0']

>>> if versioning[0]=='10':

...     print "Running 10g"

... elif versioning[0]=='9':

...    print "Running 9i"

...

Running 10g

>>> print db.dsn

localhost:1521/XE
第二步:建立 Cursor 光标
>>>cursor = db.cursor() 建立一个cursor
之后,我们可以调用这个cursor.execute(‘SQL‘) 来执行SQL语句。比如:
>>>cursor.execute(‘select * from tabs’)
执行完毕以后,可以调用cursor.fetchall()一次取完所有结果,或者cursor.fetchone()一次取一行结果
>>>row=cursor.fetchall()
>>>for x in row:
      For y in x:
         Print y,
       Print
这样就可以按照表格的形式打印取得的结果了!
在从oracle取出数据的时候,考虑到它的数据类型了吗?下面就是数据类型的对应表

Datatypes

During the fetch stage, basic Oracle data types get mapped into their Python equivalents. cx_Oracle maintains a separate set of data types that helps in this transition. The Oracle - cx_Oracle - Python mappings are:
Oracle
cx_Oracle
Python
VARCHAR2
NVARCHAR2
LONG
cx_Oracle.STRING
str
CHAR
cx_Oracle.FIXED_CHAR
NUMBER
cx_Oracle.NUMBER
int
FLOAT
float
DATE
cx_Oracle.DATETIME
datetime.datetime
TIMESTAMP
cx_Oracle.TIMESTAMP
CLOB
cx_Oracle.CLOB
cx_Oracle.LOB
BLOB
cx_Oracle.BLOB
带参数的查询:
>>> named_params = {'dept_id':50, 'sal':1000}
>>> query1 = cursor.execute('SELECT * FROM employees
WHERE department_id=:dept_id AND salary>:sal', named_params)
>>> query2 = cursor.execute('SELECT * FROM employees
WHERE department_id=:dept_id AND salary>:sal', dept_id=50, sal=1000)
这种是名字参数,还可以按位置参数:
r1 = cursor.execute('SELECT * FROM locations
WHERE country_id=:1 AND city=:2', ('US', 'Seattle'))
注意:
当只有一次参数的时候,也要把它写成元组的形式,比如
Cursor.execute(‘select name from user where id=:1’,(login_Id,))
千万要注意,login_id后面还带有一个逗号,如果没有逗号,他其实就是一个数据对象,但是当他后面有个逗号的时候,他就变成了元组的一个数据项,千万要记住啊,我就是在这里徘徊了很久。!
Cursor. Prepare的用法,
这个方法就是在prepare之后,你再去execute的时候,就不用写上sql语句参数了
>>> cursor.prepare('SELECT * FROM jobs WHERE min_salary>:min')
>>> r = cursor.execute(None, {'min':1000}) #注意,第一个参数是None,
一次执行多条sql语句
Large insert operations don't require many separate inserts because Python fully supports inserting many rows at once with the cx_Oracle.Cursor.executemany method. Limiting the number of execute operations improves program performance a lot and should be the first thing to think about when writing applications heavy on INSERTs.
Let's create a table for a Python module list, this time directly from Python. You will drop it later.
>>> create_table = """

CREATE TABLE python_modules (

module_name VARCHAR2(50) NOT NULL,

file_path VARCHAR2(300) NOT NULL

)

"""

>>> from sys import modules

>>> cursor.execute(create_table)

>>> M = []

>>> for m_name, m_info in modules.items():

...   try:

...     M.append((m_name, m_info.__file__))

...   except AttributeError:

...     pass

...

>>> len(M)

76

>>> cursor.prepare("INSERT INTO python_modules(module_name, file_path) VALUES (:1, :2)")

>>> cursor.executemany(None, M)

>>> db.commit()

>>> r = cursor.execute("SELECT COUNT(*) FROM python_modules")

>>> print cursor.fetchone()

(76,)

>>> cursor.execute("DROP TABLE python_modules PURGE")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cx_Oracle使用方法 的相关文章

随机推荐

  • refind linux内核参数,使用rEFInd实现OpenWRT / LEDE支持UEFI GPT启动

    实际上我使用的Hyper v第一代虚拟机运行LEDE17真的非常的稳定 网速各方面都非常满意了 最近可能没事找事的把Windows Server2012 R2 Hyper v第一代虚拟机里面也是运行的非常稳定的CentOS7 重新安装到Hy
  • Cisco的路由器、交换机设置 Console 密码和 Enable 密码

    进入特权模式 Switch gt en 进入全局模式 Switch conf t 修改设备名称 Switch config hostname SwPassWord 进入Console接口 line console 0 设置密码1 SwPas
  • 各种排序应用场合

    时间复杂度 O n n 插入排序 选择排序和冒泡排序 O nlogn 快速排序 堆排序和归并排序 影响排序效果的因素 待排序的数据规模 关键字的结构及其初始状态 稳定性的要求 语言工具的条件 存储结构 时间和辅助空间复杂度 应用场景 若n较
  • 【LeetCode刷题】228 汇总区间 java

    题目 给定一个 无重复元素 的 有序 整数数组 nums 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 也就是说 nums 的每个元素都恰好被某个区间范围所覆盖 并且不存在属于某个范围但不属于 nums 的数字 x 列表中的每个
  • tnscmd.pl

    usr bin perl tnscmd a lame tool to prod the oracle tnslsnr process 1521 tcp tested under Linux x86 OpenBSD Sparc perl5 I
  • jmockit使用

    官网 http jmockit github io tutorial Introduction html runningTests org jmockit jmockit jmockit version test maven surefir
  • 华为OD机试 - 数组组成的最小数字

    题目描述 给定一个整型数组 请从该数组中选择3个元素组成最小数字并输出 如果数组长度小于3 则选择数组中所有元素来组成最小数字 输入描述 一行用半角逗号分割的字符串记录的整型数组 0 lt 数组长度 lt 100 0 lt 整数的取值范围
  • c语言——指针的运用与表示

    指针 1 定义 基类型 指针变量名 2 赋值 int a int pa a int a pa a int p2 p2 a 两个运算符 取地址 后面操作数必须是变量 指针运算符 后面的操作数必须是指针 int a 3 int pa a a 正
  • python--文件的循环导入及模块查找顺序

    目录 文件循环导入问题 模块的查找顺序 验证模块查找顺序的方法 绝对导入与相对导入 文件循环导入问题 上一篇我们介绍了模块 文件的导入 现在重点讲一下文件的导入 两个文件彼此导入彼此 循环导入的时候极有可能出现某个名字还没有被创建就是用的情
  • Docker(linux container) 所依赖的底层技术

    Docker linux container 所依赖的底层技术 1 Namespace 用来做PID的隔离 有了namespace 在docker container里头看来 就是一个完整的linux的世界 在host看来 containe
  • Jmeter---BeanShell解析JSON格式的响应数据

    首先 分析一下接口的响应数据 了解接口返回数据的结构类型 如下数据所示 我们想要获取的是normalList里面的status值 但是响应结果是列表 可能是会存在多个记录 所以在实现过程中我们通过遍历normalList中的所有数据 或者是
  • JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!

    原文链接 https mp weixin qq com s MZOcDjKm4oy9mGEG3R QYA 作者 fredal https fredal xin java error check CPU 磁盘 内存 GC问题 网络 线上故障主
  • 获取网卡名称存入数组 对网卡执行相关操作

    背景 由于服务器网卡获取ip异常 需要对做bond网卡进行相关网络操作 bond网卡操作 正常执行nmlic命令 环境问题对要执行的网卡本身只有四行命令 为了防止出现多业务网卡和vlan主网卡的情况 这里选择自动获取bond网卡执行相关操作
  • 修改@vue/cli搭建的项目中默认icon图标

    今天使用 vue cli搭建了一个项目 然后想修改一下网页的icon图标 但是在public文件夹下直接替换图标 不会改变网页的icon图标 文件夹目录如下 用项目logo的icon文件替换原始的icon 重启项目还是vue默认的icon
  • 「面试题」20+Vue面试题整理

    微信搜索 前端食堂 你的前端食堂 记得按时吃饭 本文已收录在前端食堂 Github https github com Geekhyt front end canteen 感谢Star 从镜片的厚度和黄黑相见的格子衬衫我察觉到 面前坐着的这位
  • JS des加密解密

    引用库 des解密 function decryptByDES ciphertext var keyHex CryptoJS enc Utf8 parse 秘钥 var decrypted CryptoJS DES decrypt ciph
  • 《计算机网络基础与应用》笔记

    文章目录 前言 1 1认识网络 1 2 认识网络标准及通信协议 1 3认识数据通信技术 1 4选择网络的拓扑结构 2 1考察网络传输介质 2 2考察网络设备 2 3实现网络结构化布线系统 2 4配置网络设置 2 5实现局域网的硬件连接 3
  • 深度学习-图像识别FPN(Feature Pyramid Networks)

    文章目录 一 FPN 二 FPN的整体架构 FPN应用于RPN层 四 FPN总结 一 FPN 卷积网络的一个重要特征 深层网络容易响应语义特征 浅层网络容易响应图像特征 但是到了物体检测领域 这个特征便成了一个重要的问题 高层网络虽然能响应
  • InitializingBean讲解

    InitializingBean讲解 Spring中有两种类型的Bean 一种是普通Bean 另一种是工厂Bean 即FactoryBean 工厂Bean跟普通Bean不同 其返回的对象不是指定类的一个实例 其返回的是该工厂Bean的get
  • cx_Oracle使用方法

    正确安装好cx oracle之后 要使用它来连接到oracle数据库进行操作 具体应该分3步走 第一步 导入cx Oracle 建立连接 gt gt gt import cx Oracle 导入模块 gt gt gt db cx Oracl