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中的wxPython实现最基本的浏览器功能
Apr 14 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
详解python实现线程安全的单例模式
Mar 05 Python
python pandas dataframe 按列或者按行合并的方法
Apr 12 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
django列表筛选功能的实现代码
Mar 27 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
Python定义一个函数的方法
Jun 15 Python
Python创建文件夹与文件的快捷方法
Dec 08 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
根德YB400的电路分析
2021/03/02 无线电
关于php 高并发解决的一点思路
2017/04/16 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
取选中的radio的值
2010/01/11 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
详解vue-router基本使用
2017/04/18 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
python调用cmd命令行制作刷博器
2014/01/13 Python
python解析xml文件操作实例
2014/10/05 Python
Python进程间通信用法实例
2015/06/04 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Keras实现DenseNet结构操作
2020/07/06 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
女子职高个人自荐书
2014/02/01 职场文书
报关专员求职信范文
2014/02/22 职场文书
聘任书模板
2014/03/29 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python