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 版本需要一致,这个善用搜索就可以,我们直接上代码

 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3  4 import cx_Oracle 5  6 #username 7 dbusernamea = username1 8 dbusernameb = username2 9 10 #dbconnectaddress11 db_usernamea = cx_Oracle.connect(dbusernamea,password,dbaddress)12 db_usernameb = cx_Oracle.connect(dbusernameb,password,dbaddress)13 14 #cursor15 cur_usernamea = db_usernamea.cursor()16 cur_usernameb = db_usernameb.cursor()17 18 #readtablename19 def ReadTableName():20 fo = open("tablename.txt","r"):21 print(open success!)22 table_name = []23 for i in fo.readlines():24 if i != \n and i != \r\n:25 spiliti = i.replace(\t,‘‘).strip()26  table_name.append(spiliti)27  fo.close()28 return table_name29 30 #31 def CheckMainTable(ReadTableName):32 33 for tablename in ReadTableName:34 sql_str_checkmaintable = """select a.* from all_objects a where a.object_name = upper(%s) """%tablename35  cur_usernamrea.execute(sql_str_checkmaintable)36 #获取结果集37 rets = cur_usernamea.fetchall()38 #如果结果集为空判断该表在A中不存在39 if length(rets) == 0:40 print(MainAcess dont have this table: +tablename+\n)41 #写入log writelines即可 如有需要42 with open("filename_a","a") as a:43 a.writelines.(tablename+\n)44 45 else:46   sql_str_checksubtable = """select a.* from all_objects a where a.object_name = upper(%s) """%tablename47    cur_usernamreb.execute(sql_str_checksubtable)48   #获取结果集49   recv = cur_usernameb.fetchall()50   #如果结果集为空判断该表在B中不存在51   if length(recv) == 0:52   print(‘SubAcess dont have this table: +tablename+\n)53   #写入log writelines即可 如有需要54        with open("filename_b","a") as b:55   b.writelines.(tablename+\n)56 57 if __name__ == __main__:58  CheckMainTable(ReadTableName())59 60 #关闭游标61 db_usernamea.close()62 db_usernameb.close()

 

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

相关文章