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实现的数据结构与算法之队列详解
Apr 22 Python
python获取本机mac地址和ip地址的方法
Apr 29 Python
python中self原理实例分析
Apr 30 Python
python中base64加密解密方法实例分析
May 16 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
python实现多张图片拼接成大图
Jan 15 Python
详解Python中is和==的区别
Mar 21 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 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入门速成(2)
2006/10/09 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PDO::exec讲解
2019/01/28 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
javascript中length属性的探索
2011/07/31 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
在校大学生个人的自我评价
2014/02/13 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2014年护理部工作总结
2014/11/14 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
顶岗实习计划书
2015/01/16 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
消防安全主题班会
2015/08/12 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
修改并编译golang源码的操作步骤
2021/07/25 Golang
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL