cx_Oracle使用方法二
下载地址:
https://pypi.python.org/pypi/cx_Oracle/5.2.1, 下载的时候注意数据库版本和操作系统环境。
技术手册:
http://cx-oracle.readthedocs.org/en/latest/index.html
cx_Oracle使用方法
正确安装好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,
Datatypes
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('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")
BLOB & CLOB 格式的创建:
binary_content = cursor.var(cx_Oracle.BLOB)
binary_content.setvalue(0, content)
cx_Oracle使用方法二的更多相关文章
- python -- 连接 orclae cx_Oracle的使用 二
转:https://www.cnblogs.com/cyxiaer/p/9396861.html 必需的Oracle链接库的下载地址:https://www.oracle.com/technetwor ...
- Android抓包方法(二)之Tcpdump命令+Wireshark
Android抓包方法(二) 之Tcpdump命令+Wireshark 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等.学会抓包分 ...
- Java 简单实用方法二
整理以前的笔记,在学习Java时候,经常会用到一些方法.虽然简单但是经常使用.因此做成笔记,方便以后查阅 这篇博文先说明构造和使用这些方法. 1,判断String类型数据是否包含中文 可以通过正则表达 ...
- SSH框架的多表查询(方法二)增删查改
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- RAC(ReactiveCocoa)使用方法(二)
RAC(ReactiveCocoa)使用方法(一) RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用 ...
- Microsoft Edge浏览器下载文件乱码修复方法(二)
之前有写过"Microsoft Edge浏览器下载文件乱码修复方法",发现很多情况下下载文件乱码问题还是存在,这里对之前内容做简单补充,希望可以帮到大家. 方法二: 默认如果提示下 ...
- mybatis由浅入深day02_2一对一查询_2.3方法二:resultMap_resultType和resultMap实现一对一查询小结
2.3 方法二:resultMap 使用resultMap,定义专门的resultMap用于映射一对一查询结果. 2.3.1 sql语句 同resultType实现的sql SELECT orders ...
- Selenium应用代码(常见封装的方法二)
滚动窗口: //将滚动条滚到适合的位置 , 方法一 public static void setScroll(WebDriver driver,int height){ try { // String ...
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
随机推荐
- Java和Tomcat类加载机制
转自:http://blog.csdn.net/codolio/article/details/5027423 加载类是运行程序的基础,了解Java和Tomcat的类加载机制对更有效地开发.调试Web ...
- 【JAVA - SSM】之MyBatis输出映射
MyBatis中的输出映射有两种:resultType和resultMap. 1.resultType 使用resultType进行结果映射时,只有当查询结果中有至少一列的名称和resultType指 ...
- MyBatis+Spring 事务管理
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://kinglixing.blog.51cto.com/34 ...
- AndroidUI组件之ActionBar--基于下拉的导航方式
在上一篇关于ActionBar的博文中.我们知道了ActionBar是Android3.0的重要更新之中的一个.本篇博文就来写一个开发中经经常使用到的样例.用ActionBar提供基于下拉的导航方 ...
- [TypeScript] Stopping a TypeScript Build When Errors Are Found
TypeScript will always compile even if there are ridiculous errors in your project. This lesson show ...
- 数据库修复工具 - DatabaseCompressor 之从9M到900K+
数据库修复工具 - 仅限 *.mdb 格式的Access 数据库 引言: Access数据库操作有一严重Bug,当数据库文件内容添加�时,其文件容量随之添加�,但当删除数据库内容时,其数据库容量不会对 ...
- LabVIEW中的UDP通信
UDP(user datagram protoco1)提供向接收端发送信息的最简便的协议,与TCP不同,UDP不是面向连接的可靠数据流传输协议,而是面向操作的不可靠数据流传输协议.UDP在数据传输之前 ...
- Win32下 Qt与Lua交互使用:配置Qt下Lua运行环境
Lua与C++之间可以实现非常强的交互性.Lua中可以使用C++中的函数,C++中也可以使用Lua中的函数.由此可以引发出很多奇思妙想了. 简单来说,Lua动态的特性补充了C++的功能.当然,也看你具 ...
- java反射性能
项目中用到了java的反射,可以大大减少代码量.但是反射的性能却不容乐观,做了个简单的测试,如下. public void noreflect() { Person p = new Person(); ...
- ubuntu文件管理常用命令 分类: linux ubuntu 学习笔记 2015-07-02 16:57 29人阅读 评论(0) 收藏
1.关闭防火墙:ufw disable 2.以.开头的表示隐藏文件 3..和..分别代表当前目录以及当前目录的父目录 4.显示当前用户所在目录pwd 5.touch创建空文件 6.mkdir创建新目录 ...