由于一些缘故,需要人肉数据库。于是我想写些脚本去Oracle数据库中查找。 我很喜欢Python的简介,决定使用Python来做,于是去网络上找Python连Oracle的方法, 找到了cx_Oracel这个模块。 注意点:你下载的版本一定要对应到你本机客户端的Oracle的版本,你需要将相应版本的oci.dll放到Python的home目录下的Lib/site_packages下
问题描述:需要找出一个数据中所有应用表中的所有字段中哪些字段的数据记录包含了html或特殊字符的
这个问题如果人肉做,不堪设想。 好吧,我承认我很懒,于是我写了程序。
思路:查出所有的表名,查出每一个表下的所有的字段,去搜索字段为varchar2的包含哪些特殊字符的,搜出的结果数>0的就做把其记录下来。
好了,啥也不说了,代码说明一切。
# coding=gbk
import cx_Oracle
result = open('database_check.txt','w')
conn=cx_Oracle.connect ('zeus/alizeus@ZEUS.TEST')
curs=conn.cursor ()
tname_sql="select TNAME from tab where TNAME like 'ALI%'"
tab_name=curs.execute (tname_sql)
tab_name_rows=curs.fetchall()
for tn in tab_name_rows:
table_name = tn[0]
column_sql="select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH from USER_TAB_COLUMNS where TABLE_NAME="+"'"+table_name+"'"
tab_columns = curs.execute(column_sql)
columns = curs.fetchall()
for col in columns:
column_name=col[1]
data_type=col[2]
data_length=col[3]
if data_type=='VARCHAR2':
check_sql = "select count(*) from "+table_name+" where "+column_name+" like '%<%' or "+column_name+" like '%''%' or "+column_name+" like '%&%'"
curs.execute(check_sql)
count = curs.fetchone()
if count[0]>0:
print check_sql
print count
result.write('表:'+table_name+' '+'字段:'+column_name+'\n')
result.write(check_sql+'\n')
result.write(str(count[0]))
result.write('\n\n')
result.close()