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文件读取的3种方法及路径转义
Jun 21 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
python儿童学游戏编程知识点总结
Jun 03 Python
python中pygame安装过程(超级详细)
Aug 04 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
Python调用飞书发送消息的示例
Nov 10 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
HTML5标签小集
2011/08/02 HTML / CSS
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
《燕子》教学反思
2014/02/18 职场文书
售房协议书范本2014
2014/10/23 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
朋友聚会开场白
2015/06/01 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
python代码实现备忘录案例讲解
2021/07/26 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android