Python连接Oracle实例

最近需要用Python连接Oracle操作,之前接触过,没自己手写过,特此记录。数据库是Oracle 11,python版本2.7的。

这个需求是两个库A和B,假设现在需要识别一张表在A库里面有没记录,如果没有,将表名写入一个log,如果有再去B库里查有没有该表,如果没有,表名计入另外一个log文件。

查库的sql语句

select t.* from all_objects t where t.object_name = upper(&table_name);

Python连接oracle需要的package cx_Oracle 版本需要一致,这个善用搜索就可以,我们直接上代码

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import cx_Oracle

#username
dbusernamea = ‘username1‘
dbusernameb = ‘username2‘

#dbconnectaddress
db_usernamea = cx_Oracle.connect(dbusernamea,‘password‘,‘dbaddress‘)
db_usernameb = cx_Oracle.connect(dbusernameb,‘password‘,‘dbaddress‘)

#cursor
cur_usernamea = db_usernamea.cursor()
cur_usernameb = db_usernameb.cursor()

#readtablename
def ReadTableName():
    fo = open("tablename.txt","r"):
    print(‘open success!‘)
    table_name = []
    for i in fo.readlines():
        if i != ‘\n‘ and i != ‘\r\n‘:
            spiliti = i.replace(‘\t‘,‘‘).strip()
            table_name.append(spiliti)
    fo.close()
    return table_name

#
def CheckMainTable(ReadTableName):

    for tablename in ReadTableName:
    sql_str_checkmaintable = """select a.* from all_objects a where a.object_name = upper(%s) """%tablename
    cur_usernamrea.execute(sql_str_checkmaintable)
    #获取结果集
    rets = cur_usernamea.fetchall()
    #如果结果集为空判断该表在A中不存在
    if length(rets) == 0:
        print(‘MainAcess don‘t have this table: ‘+tablename+‘\n‘)
        #写入log writelines即可 如有需要
        with open("filename_a","a") as a:
            a.writelines.(tablename+‘\n‘)

    else:
      sql_str_checksubtable = """select a.* from all_objects a where a.object_name = upper(%s) """%tablename
      cur_usernamreb.execute(sql_str_checksubtable)
      #获取结果集
      recv = cur_usernameb.fetchall()
      #如果结果集为空判断该表在B中不存在
      if length(recv) == 0:
          print(‘SubAcess don‘t have this table: ‘+tablename+‘\n‘)
          #写入log writelines即可 如有需要
54        with open("filename_b","a") as b:
              b.writelines.(tablename+‘\n‘)

if __name__ == ‘__main__‘:
    CheckMainTable(ReadTableName())

#关闭游标
db_usernamea.close()
db_usernameb.close()

 其实最近也是才开始学习Python连接数据库这个东西,里面一些内容可能写的不好,也不是很完善。因为是纯粹手打,代码可能会有疏漏,有错误的地方如果有人看见请指出,我会及时修正。这个脚本在工作中运行过,亲测有效。但是其实里面有部分内容我也是搜索的,了解的不具体,复制过来改改就用了,所以有问题请大家不吝赐教。

相关推荐