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