Python如何查看两个数据库的同名表的字段名差异_第1页
Python如何查看两个数据库的同名表的字段名差异_第2页
Python如何查看两个数据库的同名表的字段名差异_第3页
Python如何查看两个数据库的同名表的字段名差异_第4页
Python如何查看两个数据库的同名表的字段名差异_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python如何查看两个数据库的同名表的字段名差异engine=sqlalchemy.create_engine('mysql+pymysql://root:123456@:3306/a')

engine1=sqlalchemy.create_engine('mysql+pymysql://root:123456@:3306/b')

inspector=sqlalchemy.inspect(engine)

inspector1=sqlalchemy.inspect(engine1)

table_column_map=get_table_column_map(inspector)

table_column_map1=get_table_column_map(inspector1)

compare_table_column_difference(table_column_map,table_column_map1)

#student{'gender','chemistry','physics','biology'}

mysql-utilities

也可以使用专门的工具mysql-utilities中的mysqldiff

文档

mysqldiff--help

命令

mysqldiff--server1=user:pass@host:port--server2=user:pass@host:portdb1.object1:db2.object1

例子

mysqldiff--server1=root:123456@:3306--server2=root:123456@:3306a.student:b.student

效果

---a.student

+++b.student

@@-3,8+3,13@@

`class_id`int(11)DEFAULTNULL,

`name`varchar(255)DEFAULTNULL,

`birthday`dateDEFAULTNULL,

+`gender`tinyint(4)DEFAULTNULL,

`chinese`int(11)DEFAULTNULL,

`math`int(11)DEFAULTNULL,

`english`int(11)DEFAULTNULL,

-PRIMARYKEY(`id`)

+`physics`int(11)DEFAULTNULL,

+`chemistry`int(11)DEFAULTNULL,

+`biology`int(11)DEFAULTNULL,

+PRIMARYKEY(`id`),

+KEY`idx_class_id`(`class_id`)USINGBTREE

)ENGINE=InnoDBDEFAULTCHARSET=utf8

优点:比较内容更详尽

缺点:无法批量,要自己指定比较对象(稍微改写即可克服)

Python数据库之间差异对比

此脚本用于两个数据库之间的表、列、栏位、索引的差异对比。

catoracle_diff.py

#!/home/dba/.pyenv/versions/3.5.2/bin/python

#coding=utf-8

importcx_Oracle

importtime

importdifflib

importos

v_host=os.popen('echo$HOSTNAME')

classOracle_Status_Output():

def__init__(self,username,password,tns):

try:

self.db=cx_Oracle.connect(username,password,tns)

self.cursor=self.db.cursor()

exceptExceptionase:

print('Wrong')

print(e)

defschemas_tables_count(self,sql,db):

try:

self.cursor.execute(sql)

v_result=self.cursor.fetchall()

#print(v_result)

count=0

foriinrange(len(v_result)):

#print(v_result[i][1],'--',v_result[i][0])

count=int(v_result[i][0])+count

print(db,'CountTables','--',count)

exceptExceptionase:

print('Wrong--schemas_tables_count()')

print(e)

defschemas_tables_list(self,sql):

try:

self.cursor.execute(sql)

v_result=self.cursor.fetchall()

#print(v_result)

returnv_result

exceptExceptionase:

print('Wrong--schemas_tables_list()')

print(e)

defschemas_tables_columns_list(self,sql,data):

try:

self.cursor.execute(sql,A=data)

v_result=self.cursor.fetchall()

returnv_result

exceptExceptionase:

print('schemas_tables_columns_list')

print(e)

defschemas_tables_indexes_list(self,sql,data):

try:

self.cursor.execute(sql,A=data)

v_result=self.cursor.fetchall()

returnv_result

exceptExceptionase:

print('schemas_tables_indexes_list')

print(e)

defclose(self):

self.db.close()

schemas_tables_count_sql="SELECTCOUNT(1),S.OWNERFROMDBA_TABLESSWHERES.OWNERin('PAY','BOSS','SETTLE','ISMP','TEMP_DSF','ACCOUNT')GROUPBYS.OWNER"

schemas_tables_list_sql

="SELECTS.OWNER||'.'||S.TABLE_NAMEFROMDBA_TABLESSWHERES.OWNERin('PAY','BOSS','SETTLE','ISMP','TEMP_DSF','ACCOUNT')"

schemas_tables_columns_sql="selecta.OWNER||'.'||a.TABLE_NAME||'.'||a.COLUMN_NAME||'.'||a.DATA_TYPE||'.'||a.DATA_LENGTHfromdba_tab_columnsawherea.OWNER||'.'||a.TABLE_NAME=:A"

schemas_tables_indexes_sql="SELECTT.table_owner||'.'||T.table_name||'.'||T.index_nameFROMDBA_INDEXESTWHERET.table_owner||'.'||T.table_name=:A"

jx_db

=Oracle_Status_Output('dbadmin','QazWsx12','34:1522/paydb')

pro_db=Oracle_Status_Output('dbadmin','QazWsx12','localhost:1521/paydb')

jx_db.schemas_tables_count(schemas_tables_count_sql,'JX')

pro_db.schemas_tables_count(schemas_tables_count_sql,'PRO')

jx_schemas_tables

=jx_db.schemas_tables_list(schemas_tables_list_sql)

pro_schemas_tables=pro_db.schemas_tables_list(schemas_tables_list_sql)

#print(jx_schemas_tables)

#print(pro_schemas_tables)

defdiff_jx_pro(listA,listB,listClass):

iflistA!=[]andlistB!=[]:

#listD

=list(set(listA).union(set(listB)))

listC

=sorted(list(set(listA).intersection(set(listB))))

listAC=sorted(list(set(listA).difference(set(listC))))

listBC=sorted(list(set(listB).difference(set(listC))))

#ifsorted(listD)==sorted(listC):

#

print('AllTablesOK')

iflistC==[]:

#print('JX',listClass,':',listA)

#print('PRO',listClass,':',listB)

print('Intersection','JX',listClass,':',listAC,'---','PRO',listClass,':',listBC)

eliflistAC!=[]orlistBC!=[]:

print('Difference

','JX',listClass,':',listAC,'---','PRO',listClass,':',listBC)

else:

pass

returnlistC

if__name__=='__main__':

#diff_jx_pro(jx_schemas_tables,pro_schemas_tables)

tables_lists=diff_jx_pro(jx_schemas_tables,pro_schemas_tables,'Tables')

foriinrange(len(tables_lists)):

table_name="".join(tuple(tables_lists[i]))

#print(table_name)

jx_schemas_tables_columns=jx_db.schemas_tables_columns_list(schemas_tables_columns_sql,table_name)

pro_schemas_tables_columns=pro_db.schemas_tables_columns_list(schemas_tables_columns_sql,table_name)

diff_jx_pro(jx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论