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文件中文编码问题
Nov 22 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
深入理解Django-Signals信号量
Feb 19 Python
python版DDOS攻击脚本
Jun 12 Python
Puppeteer使用示例详解
Jun 20 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python向字符串中添加元素的实例方法
Jun 28 Python
python爬虫增加访问量的方法
Aug 22 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 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实现的下载css文件中的图片的代码
2010/02/08 PHP
Chrome Web App开发小结
2014/09/04 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
javascript定义函数的方法
2010/12/06 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
设置python3为默认python的方法
2018/10/31 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python模拟实现分发扑克牌
2020/04/22 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
工业自动化专业毕业生推荐信
2013/11/18 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
培训班主持词
2014/03/28 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
北京英语导游词
2015/02/12 职场文书
银行资信证明
2015/06/17 职场文书
公司开业主持词
2015/07/02 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js