Oracle数据库之Python连接Oracle数据库
小标 2018-09-10 来源 : 阅读 2551 评论 0

摘要:本文主要向大家介绍了Oracle数据库之Python连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之Python连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

Python连接Oracle数据库 

下载cx_Oracle  

        在Python连接操作Oracle数据前,我们先要导入相应的模块包,Python有一个模块cx_Oracle可以与Oracle相连。

要使用cx_Oracle,就要先下载安装。我这里默认的是用windows系统,下载即点击这里,解压后直接打开.exe文件运行安装

验证安装是否正确:

     运行 : import cx_Oracle

如果没有报错,则代表安装成功。

连接oracle数据库

在我们安装好cx_Oracle模块以后,并且导入对应的模块,然后来连接我们的数据,

验证是否连接成功,代码如下:

import cx_Oracleprint '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)isbegin
 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 mynameprint 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 pymssqlclass 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_Oracleimport math#连接Oracle数据库conn = cx_Oracle.connect('scott/tiger@127.0.0.1/orcl') #或者localhostprint '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 = 33if age >= 18:    print 'adult'elif age >=6:    print 'teenager'else:    print 'children'#for循环语句names = ['Michael','Bob','Tracy']for name in names:    print namefor x in range(100): #0至99这一百个数
   print x#while循环sum = 0
n = 99while n>0 :
   sum = sum + n
   n = n - 2print 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,没有重复的keys=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 -xprint 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 rprint type(r)#可变参数函数   必选参数 默认参数 可变参数 关键字参数def calc(numbers):
   sum = 0    for n in numbers:
       sum = sum + n*n    return sumprint calc([1,3,5,7])  #需要传list或者tubedef calc2(*numbers):
   sum = 0;    for n in numbers:
       sum = sum + n*n    return sumprint 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)

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved