统计未同步表的数量及主键名称等

这段代码主要用于通过Python读取RDS配置文件,连接数据库并获取表名,然后对每个表进行描述,找出主键(PRI)和唯一键(UNIQUE_KEY)。它首先筛选出非注释行,使用正则表达式提取数据库名和表名,接着通过子进程执行SQL命令获取表结构,并进一步提取主键和唯一键信息。最后,将这些信息写入文件中。
摘要由CSDN通过智能技术生成
#author yw_shan
import os
import subprocess
import re
import time
import sys
class pull_data(object):
    def get_rds_conn(self):
        with open('conf/rds.conf','r') as f:
            rds_list=f.readlines()
            return rds_list

    def get_conn_date(self,rds):
        with open("./.tmptabnm",'w') as f:
            for rds_list in rds:
                if rds_list.startswith('#'):
                    continue
                rds_list=rds_list.strip()
                rds_dbname1=re.findall('-u(.*)_ro',rds_list)
                rds_dbname=''.join(rds_dbname1)
                rds_get_tab="{} -D {} 2>/dev/null -e 'show tables'" .format(rds_list,rds_dbname)
                sbp1=subprocess.Popen(rds_get_tab,shell=True,stdout=subprocess.PIPE).stdout.readlines()
                sbp2=''.join(sbp1)
                sbp3=sbp2.split('\n')
                for schem1 in sbp3:
                    if schem1 is None or schem1 == '' or 'tables_in' in schem1.lower():
                        continue
                    sch_tab="{}.{}" .format(rds_dbname,schem1)
                    f.writelines(sch_tab+'\n')


    def get_tab_key(self,rds):
        with open("./.tmptabnm",'r') as f:
            tab_key=[]
            rdss=f.readlines()
            rdsstrs=''.join(rdss).split('\n')
            for rds_list in rds:
                if rds_list.startswith('#'):
                    continue
                rds_list='{} 2>/dev/null' .format(rds_list.strip())
                rds_dbname1=re.findall('-u(.*)_ro',rds_list)
                rds_dbname=''.join(rds_dbname1).strip()
                for rdsstr in rdsstrs:
                    rds_sch=re.findall('(\S+)\.\S+',rdsstr)
                    rds_sch1=''.join(rds_sch).strip()
                    if rds_dbname.lower()!=rds_sch1.lower():
                        continue
                    rds_get_tab="{} -e 'desc {}'" .format(rds_list,rdsstr)
                    sbp1=subprocess.Popen(rds_get_tab,shell=True,stdout=subprocess.PIPE)
                    sbp2=subprocess.Popen(['grep','PRI'],stdin=sbp1.stdout,stdout=subprocess.PIPE)
                    sbp3=subprocess.Popen(['wc','-l'],stdin=sbp2.stdout,stdout=subprocess.PIPE).communicate()[0]
                    if int(sbp3.strip())!=0:
                        tab_key.append(rdsstr+'--yes \n')
                    else:`在这里插入代码片`
                        tab_key.append(rdsstr+'--no \n')
                print("==========>%s" %tab_key)
            with open('./tab-key.txt','w') as f:
                f.writelines(tab_key)
   def get_tab_key_colname(self,rds):
        with open("./test", 'r') as f:
            tab_key = []
            rdss = f.readlines()
            rdsstrs = ''.join(rdss).split('\n')
            for rds_list in rds:
                if rds_list.startswith('#') or rds_list.startswith('\n'):
                    continue
                rds_list = '{} 2>/dev/null'.format(rds_list.strip())
                rds_dbname1 = re.findall('-u(.*)_ro', rds_list)
                rds_dbname = ''.join(rds_dbname1).strip()
                for rdsstr in rdsstrs:
                    rds_sch = re.findall('(\S+)\.\S+', rdsstr)
                    rds_sch1 = ''.join(rds_sch).strip()
                    if rds_dbname.lower() != rds_sch1.lower() or rds_sch1=='\n':
                        continue
                    rds_get_tab = "{} -D {} -e 'show create table {}'".format(rds_list,rds_dbname, rdsstr)

                    rds_get_tab1=subprocess.Popen(rds_get_tab,shell=True,stdout=subprocess.PIPE)
                    pkey_1=subprocess.Popen(["egrep","-io","PRIMARY KEY\s(\S+)|UNIQUE_KEY\s(\S+)|UNIQUE KEY\s(.*\\n)"],stdin=rds_get_tab1.stdout,stdout=subprocess.PIPE)
                    pkey = subprocess.Popen(["uniq"], stdin=pkey_1.stdout,stdout=subprocess.PIPE).communicate()[0]
                    if "PRIMARY KEY" in pkey:
                        print(rdsstr+'@@@PRIMARY KEY@@@'+pkey)
                        primary_key=rdsstr + '@@@PRIMARY KEY@@@' + pkey
                        tab_key.append(primary_key)
                    elif "UNIQUE_KEY" in pkey or "UNIQUE KEY" in pkey:
                        unique_key=rdsstr + '@@@UNIQUE_KEY@@@' + pkey
                        tab_key.append(unique_key)
                    else:
                        pkey_MUL_0 = "{} -D {} -e 'desc {}'".format(rds_list, rds_dbname, rdsstr)
                        pkey_MUL_1 = subprocess.Popen(pkey_MUL_0, shell=True, stdout=subprocess.PIPE)
                        pkey_MUL_2 = subprocess.Popen(["egrep", "-i", "MUL|PRI"],stdin=pkey_MUL_1.stdout, stdout=subprocess.PIPE)
                        pkey_MUL_3 = subprocess.Popen(["awk", "{print $1}"], stdin=pkey_MUL_2.stdout,stdout=subprocess.PIPE)
                        pkey_MUL_4 = subprocess.Popen(["tr", "\\n",","], stdin=pkey_MUL_3.stdout,stdout=subprocess.PIPE)
                        pkey_MUL = subprocess.Popen(["sed", "-r","s/,$/\\n/g"], stdin=pkey_MUL_4.stdout,stdout=subprocess.PIPE).communicate()[0]
                        if "PRI".upper() in pkey_MUL:
                            pri_key=rdsstr + '@@@PRI@@@' + pkey_MUL
                            tab_key.append(pri_key)
                        elif "MUL".upper() in pkey_MUL:
                            mul_key=rdsstr + '@@@PRI@@@' + pkey_MUL
                            tab_key.append(mul_key)
                        else:
                            null_key=rdsstr + '@@@PRI@@@' + pkey_MUL
                            tab_key.append(null_key)
            for keynm1 in tab_key:
                keynm=keynm1.replace("`","'").replace(',\n','').replace('\n)','').strip()
                print(keynm)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值