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获取linux主机ip的简单实现方法
Apr 18 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
使用django实现一个代码发布系统
Jul 18 Python
python操作excel让工作自动化
Aug 09 Python
解决python有时候import不了当前的包问题
Aug 28 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
Python 没有main函数的原因
Jul 10 Python
python实现求纯色彩图像的边框
Apr 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
php常用字符串比较函数实例汇总
2014/11/24 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python PyTorch预训练示例
2018/02/11 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
django和vue实现数据交互的方法
2019/08/21 Python
Python类中self参数用法详解
2020/02/13 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
python实现二分查找算法
2020/09/18 Python
python中reload重载实例用法
2020/12/15 Python
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
初一生物教学反思
2014/01/18 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
财会专业大学生求职信
2014/09/26 职场文书
建筑工地文明标语
2014/10/09 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
感恩教师节主题班会
2015/08/12 职场文书
小组组名及励志口号
2015/12/24 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python