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)