python 两个数据库postgresql对比


Posted in Python onOctober 21, 2019

这篇文章主要介绍了python 两个数据库postgresql对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

比较两个postgresql数据库,原理 比较数据库中各表的大小

1. 数据库查询语句

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
Python中subprocess模块用法实例详解
May 20 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
对numpy中shape的深入理解
Jun 15 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
python爬虫之自制英汉字典
Jun 24 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python中sys模块的介绍与实例
Apr 17 Python
Python作用域和名称空间的详细介绍
Apr 13 Python
python多进程(加入进程池)操作常见案例
Oct 21 #Python
Python实现字符串中某个字母的替代功能
Oct 21 #Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 #Python
基于Python解密仿射密码
Oct 21 #Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 #Python
python超时重新请求解决方案
Oct 21 #Python
详解python中*号的用法
Oct 21 #Python
You might like
php中的三元运算符使用说明
2011/07/03 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
php array_map()函数实例用法
2021/03/03 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
tensorflow学习教程之文本分类详析
2018/08/07 Python
简单了解django缓存方式及配置
2019/07/19 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
Python request操作步骤及代码实例
2020/04/13 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
python3.7调试的实例方法
2020/07/21 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
本科生职业生涯规划书范文
2014/01/21 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
六个一活动实施方案
2014/03/21 职场文书
安全生产演讲稿
2014/05/09 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
java设计模式--原型模式详解
2021/07/21 Java/Android