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 相关文章推荐
用Python脚本生成Android SALT扰码的方法
Sep 18 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python实现12306火车票查询器
Apr 20 Python
pygame实现弹力球及其变速效果
Jul 03 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
如何运行带参数的python脚本
Nov 15 Python
pytorch之ImageFolder使用详解
Jan 06 Python
使用Python求解带约束的最优化问题详解
Feb 11 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判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
javascript 函数调用规则
2009/08/26 Javascript
再论Javascript的类继承
2011/03/05 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
Python退火算法在高次方程的应用
2018/07/26 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
留学推荐信怎么写
2014/01/25 职场文书
物理研修随笔感言
2014/02/14 职场文书
采购内勤岗位职责
2015/04/13 职场文书
论文评审意见
2015/06/05 职场文书
亲情作文之母爱
2019/09/25 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
Python爬取某拍短视频
2021/06/11 Python
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA