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通过floor函数舍弃小数位的方法
Mar 17 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
机器学习python实战之决策树
Nov 01 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python内置数据类型之列表操作
Nov 12 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python3图片文件批量重命名处理
Oct 31 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
pycharm修改file type方式
Nov 19 Python
Python模块常用四种安装方式
Oct 20 Python
Python LMDB库的使用示例
Feb 14 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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使用Redis存储session时的一个Warning定位
2017/07/05 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
python之wxPython应用实例
2014/09/28 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
详解python中的数据类型和控制流
2019/08/08 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
浅析Python 序列化与反序列化
2020/08/05 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
公务员转正考察材料
2014/02/07 职场文书
建设投标担保书
2014/05/13 职场文书
地理科学专业自荐信
2014/09/01 职场文书
撤诉书怎么写
2015/05/19 职场文书
企业管理不到位检讨书
2019/06/27 职场文书