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数据库的主要内容,如果未能解决你的问题,请参考以下文章

oracle 第二个数据库实例,用plsql不能连接

如何在Python下连接Oracle数据库

如何在Python下连接Oracle数据库

如何在 Toad for Oracle 中使用自定义代码片段?

python使用cx_oracle模块连接oracle数据库

sql Oracle代码片段