Python连接Oracle数据库
Posted Blue眼泪2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python连接Oracle数据库相关的知识,希望对你有一定的参考价值。
Python连接Oracle数据库
下载cx_Oracle
在Python连接操作Oracle数据前,我们先要导入相应的模块包,Python有一个模块cx_Oracle可以与Oracle相连。
要使用cx_Oracle,就要先下载安装。我这里默认的是用windows系统,下载即点击这里,解压后直接打开.exe文件运行安装
验证安装是否正确:
运行 : import cx_Oracle
如果没有报错,则代表安装成功。
连接oracle数据库
在我们安装好cx_Oracle模块以后,并且导入对应的模块,然后来连接我们的数据,
验证是否连接成功,代码如下:
import cx_Oracle print \'Ready: \' conn = cx_Oracle.connect(\'scott/tiger@localhost/orcl\') print conn.version
对应结果:
这样,代表我们的python程序已经连接上了我们本机的数据了
执行SQL语句
下面我们来执行一些sql语句,看看能否在oracle中起作用:
我们·先创建空表:
create table person ( name nvarchar2(20), age number, address nvarchar2(30)); select * from person;
然后执行我们的插入操作:
import cx_Oracle conn = cx_Oracle.connect(\'scott/tiger@localhost/orcl\') print conn.version c=conn.cursor() x=c.execute(\'insert into person(name,age,address) values(:1,:2,:3)\',[\'Jim\',23,\'大连\']) conn.commit(); c.close() conn.close() print \'大家好,大连\'
如果出现中文乱码的现象,我们可以在python中加入这么一句话:
import os os.environ[\'NLS_LANG\'] = \'SIMPLIFIED CHINESE_CHINA.UTF8\'
这样执行的话,我们的数据库中就新增了一条数据
下面我们已经在person表中插入多条数据,执行查询语句:
conn = cx_Oracle.connect(\'scott/tiger@localhost/orcl\') print conn.version c=conn.cursor() sql = \'select * from person\' c.execute(sql) #执行sql语句 for x in c: print x[0],x[1],x[2]
结果:
调用存储过程和函数
创建存储过程:
create or replace procedure p_updateAgeByName(iname in nvarchar2,myname out nvarchar2) is begin myname :=iname||\',Good Morning\'; end;
利用python执行存储过程:
conn = cx_Oracle.connect(\'scott/tiger@localhost/orcl\') print conn.version c = conn.cursor() name = \'Joe\' myname = c.var(cx_Oracle.STRING) x = c.callproc(\'p_updateAgeByName\',[name,myname]) print myname print myname.getvalue() c.close() conn.close()
运行结果:
调用函数
import cx_Oracle conn=cx_Oracle.connect(\'load/123456@localhost/ora11g\') c=conn.cursor() str1=\'nice\' str2=c.callfunc(\'f_demo\',cx_Oracle.STRING,[str1]) print(str2) c.close() conn.close()
Python连接sqlserver数据库
import pymssql class MSSQL: def __init__(self,host,user,pwd,db): self.host = host self.user = user self.pwd = pwd self.db = db def __GetConnect(self): if not self.db: raise(NameError,"没有设置数据库信息") self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8") cur = self.conn.cursor() if not cur: raise(NameError,"连接数据库失败") else: return cur def ExecQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) resList = cur.fetchall() #查询完毕后必须关闭连接 self.conn.close() return resList def ExecNonQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) self.conn.commit() self.conn.close()
怎么执行呢?
ms = MSSQL(host="localhost",user="sa",pwd="1234",db="testdb")
sql = " "#这里是sql语句
ms.ExecNonQuery(sql)
# -*- coding: gbk -*- import cx_Oracle import math #连接Oracle数据库 conn = cx_Oracle.connect(\'scott/tiger@127.0.0.1/orcl\') #或者localhost print \'Oracle数据连接OK\' print \'数据库的版本号是:\',conn.version c = conn.cursor() sql = \'select * from emp\' c.execute(sql) for x in c: print x[0],x[1],x[2] #判断语句 age = 33 if age >= 18: print \'adult\' elif age >=6: print \'teenager\' else: print \'children\' #for循环语句 names = [\'Michael\',\'Bob\',\'Tracy\'] for name in names: print name for x in range(100): #0至99这一百个数 print x #while循环 sum = 0 n = 99 while n>0 : sum = sum + n n = n - 2 print sum #raw_input等待输入 birth = int(raw_input(\'please input your birth:\')) if birth > 2000: print \'00后\' else: print \'00前\' #dict字典的使用 d = {\'Jim\':95,\'Bob\':94,\'Lucy\':88} print d[\'Jim\'] #set 没有value,没有重复的key s=set([1,2,3,4,2,3,1,4]) print s #定义函数 def my_abs(x): if not isinstance(x,(int,float)): raise TypeError(\'bad operand type\') if x > 0: return x else: return -x print my_abs(-123) #函数返回多个值 def move(x,y,step,angle=0): nx=x+step*math.cos(angle) ny=y-step*math.sin(angle) return nx, ny x,y=move(100,100,60,math.pi/6) print x,y r = move(100,100,60) print r print type(r) #可变参数函数 必选参数 默认参数 可变参数 关键字参数 def calc(numbers): sum = 0 for n in numbers: sum = sum + n*n return sum print calc([1,3,5,7]) #需要传list或者tube def calc2(*numbers): sum = 0; for n in numbers: sum = sum + n*n return sum print calc2(1,3,5,7) #可以传可变参数 #如果已经存在list,也可以作为参数 num=[1,2,3] print calc2(*num) #递归函数 def fact(n): if n==1: return 1 return n*fact(n-1) print fact(1) print fact(5)
以上是关于Python连接Oracle数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Toad for Oracle 中使用自定义代码片段?