zoukankan      html  css  js  c++  java
  • Python连接数据库

    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)
  • 相关阅读:
    Excel 用row()函数 在Excel中自动添加序号,
    sql server数据导入
    Excel导入sq server后数据列以科学计数法显示
    left join 和 left outer join 的区别
    多点求值与暴力插值
    生成函数

    洲阁筛 学习笔记
    「NOI2017」游戏 解题报告
    CF 1045 H. Self-exploration 解题报告
  • 原文地址:https://www.cnblogs.com/Jims2016/p/5858689.html
Copyright © 2011-2022 走看看