python 兩個(gè)數(shù)據(jù)庫(kù)postgresql對(duì)比
這篇文章主要介紹了python 兩個(gè)數(shù)據(jù)庫(kù)postgresql對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
比較兩個(gè)postgresql數(shù)據(jù)庫(kù),原理 比較數(shù)據(jù)庫(kù)中各表的大小
1. 數(shù)據(jù)庫(kù)查詢語(yǔ)句
2. python字典比較
import psycopg2 import sys class PdbModel: def __init__(self, host, dbname, username='postgres', password='postgres', port='5432'): self.host = host self.dbname = dbname self.username = username self.password = password self.port = port self.conn = None self.cursor = None self.init_db() def init_db(self): try: self.conn = psycopg2.connect(database=self.dbname, user=self.username, password=self.password, host=self.host, port="5432") self.cursor = self.conn.cursor() except Exception, e: error_out_print("Error: connection to db %s : %s failed. check need" % (self.host, self.dbname)) print e sys.exit(-1) def execute_sql(self, sql, is_exist=True): """ execute sql and return rows :param sql: :return: results of execute sql """ try: standout_print('command sql : %s' % sql) self.cursor.execute(sql) rows = self.cursor.fetchall() return rows except Exception, e: self.conn.rollback() error_out_print("Failed: failed execute sql [%s]" % sql) error_out_print(e) if is_exist: self.close() sys.exit(-1) else: return None def get_tables_size(self): """ select table_schema || '.' || table_name as table_full_name , pg_size_pretty(pg_total_relation_size('"'||table_schema||'"."'||table_name||'"')) as size from information_schema.tables order by pg_total_relation_size('"'||table_schema||'"."'||table_name||'"') DESC :return: """ standout_print("get the size of tables in db [%s]." % self.dbname) sql = """ select table_schema || '.' || table_name as table_full_name , pg_size_pretty(pg_total_relation_size('"'||table_schema||'"."'||table_name||'"')) as size from information_schema.tables order by pg_total_relation_size('"'||table_schema||'"."'||table_name||'"') DESC """ rows = self.execute_sql(sql) table_size_dic = {} for row in rows: table_name = row[0] table_size = row[1] table_size_dic[table_name] = table_size return table_size_dic def standout_print(info): sys.stdout.write("Info: %s " % info) sys.stdout.flush() def error_out_print(info): sys.stderr.write("Error: %s " % info) sys.stderr.flush() if __name__ == '__main__': db1 = '' db2 = '' host = "172.16.101.92" db_model1 = PdbModel(host, db1) db_model2 = PdbModel(host, db2) table_size_dic1 = db_model1.get_tables_size() table_size_dic2 = db_model2.get_tables_size() import pprint # pprint.pprint(table_size_dic1) # pprint.pprint(table_size_dic2) print cmp(table_size_dic1, table_size_dic2) is_equal = cmp(table_size_dic1, table_size_dic2) different_table_size_dic = {} if is_equal == 0: print "these tables in two database are same." else: keys1 = table_size_dic1.keys() keys2 = table_size_dic2.keys() for key in keys1: value1 = table_size_dic1.get(key) value2 = table_size_dic2.get(key) if cmp(value1, value2) != 0: different_table_size_dic[key] = (value1,value2) pprint.pprint(different_table_size_dic)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python隨機(jī)生成數(shù)據(jù)后插入到PostgreSQL
- Python連接PostgreSQL數(shù)據(jù)庫(kù)的方法
- Python實(shí)現(xiàn)連接postgresql數(shù)據(jù)庫(kù)的方法分析
- python連接PostgreSQL數(shù)據(jù)庫(kù)的過(guò)程詳解
- Python 中創(chuàng)建 PostgreSQL 數(shù)據(jù)庫(kù)連接池
- Python讀取postgresql數(shù)據(jù)庫(kù)詳情
- Python訪問(wèn)PostgreSQL數(shù)據(jù)庫(kù)詳細(xì)操作
相關(guān)文章
django之對(duì)FileField字段的upload_to的設(shè)定方法
今天小編就為大家分享一篇django之對(duì)FileField字段的upload_to的設(shè)定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07pytorch教程resnet.py的實(shí)現(xiàn)文件源碼分析
torchvision.models這個(gè)包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用的網(wǎng)絡(luò)結(jié)構(gòu),并且提供了預(yù)訓(xùn)練模型,可以通過(guò)簡(jiǎn)單調(diào)用來(lái)讀取網(wǎng)絡(luò)結(jié)構(gòu)和預(yù)訓(xùn)練模型2021-09-09簡(jiǎn)單學(xué)習(xí)Python time模塊
這篇文章主要和大家一起簡(jiǎn)單學(xué)習(xí)一下Python time模塊,Python time模塊提供了一些用于管理時(shí)間和日期的C庫(kù)函數(shù),對(duì)time模塊感興趣的小伙伴們可以參考一下2016-04-04Python3如何使用range函數(shù)替代xrange函數(shù)
這篇文章主要介紹了Python3如何使用range函數(shù)替代xrange函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python實(shí)現(xiàn)Linux下守護(hù)進(jìn)程的編寫方法
這篇文章主要介紹了Python實(shí)現(xiàn)Linux下守護(hù)進(jìn)程的編寫方法,比較實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08