python实现数据库跨服务器迁移


Posted in Python onApril 12, 2018

 基于Python2.7的版本环境,Python实现的数据库跨服务器(跨库)迁移, 每以5000条一查询一提交,代码中可以自行更改每次查询提交数目.

# -*- coding: utf-8 -*-

import MySQLdb
import time
import warnings

warnings.filterwarnings("ignore")


class ConnectMysql(object):
  def __init__(self):
#     这里设置分页查询, 每页查询多少数据
    self.page_size = 5000

  def getTable(self):
    conn = MySQLdb.connect(
      host="***.***.**.**",
      user="****",
      passwd="*************",
      db='****',
      charset='utf8'
    )
    conn_local = MySQLdb.connect(
      host="********************************",
      user="**********",
      passwd="********",
      db='*******',
      charset='utf8'
    )
    cur = conn.cursor()
    cur_local = conn_local.cursor()
    cur.execute('show tables')
    tables = cur.fetchall()
    for table in tables:
      print str(table[0]).lower()
      # 需要迁移的数据库查询表的列数
      cur.execute("SELECT COUNT(*) FROM information_schema.COLUMNS WHERE table_schema='china' AND table_name='" + table[0] + "'")
      table_col_count = cur.fetchone()
      # print table_col_count[0]
      # 需要迁移的数据库查询表的结构
      cur.execute('show create table ' + table[0])
      result = cur.fetchall()
      create_sql = result[0][1]
      # 查询需要迁移的数据库表的数据条数
      cur.execute('select count(*) from ' + table[0])
      total = cur.fetchone()
      page = total[0] / self.page_size
      page1 = total[0] % self.page_size
      if page1 != 0:
        page = page + 1

      # 阿里云数据库创建表
      cur_local.execute("SELECT table_name FROM information_schema.`TABLES` WHERE table_schema='user' AND table_name='" + str(table[0]).lower() + "'")
      table_name = cur_local.fetchone()
      if table_name is None:
        cur_local.execute(create_sql)
      for p in range(0, page):
        while True:
          try:
            print '开始', table[0], '的第', p + 1, '页查询'
            if p == 0:
              limit_param = ' limit ' + str(p * self.page_size) + ',' + str(self.page_size)
            else:
              limit_param = ' limit ' + str(p * self.page_size + 1) + ',' + str(self.page_size)
            cur.execute('select * from ' + table[0] + limit_param)
            inserts = cur.fetchall()
            print '查询成功'
            param = ''
            for i in range(0, table_col_count[0]):
              param = param + '%s,'
            print '开始插入'
            cur_local.executemany('replace into ' + table[0] + ' values (' + param[0:-1] + ')', inserts)
            print table[0], '的第', p + 1, '页, 插入完成, 还有', page - p - 1, '页, 任重而道远'
            conn_local.commit()
            break
          except Exception as e:
            print e
            time.sleep(60)
            cur = conn.cursor()
            cur_local = conn_local.cursor()
        print table[0], ' 插入完成'
        print '\n \n ======================================================================== \n\n'
    cur_local.close()
    conn_local.close()
    cur.close()
    conn.close()


if __name__ == '__main__':
  conn_mysql = ConnectMysql()
  conn_mysql.getTable()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python实现Const详解
Jan 27 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
python 调用c语言函数的方法
Sep 29 Python
Python3 log10()函数简单用法
Feb 19 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
解决python3爬虫无法显示中文的问题
Apr 12 #Python
python读取中文txt文本的方法
Apr 12 #Python
基于python 处理中文路径的终极解决方法
Apr 12 #Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 #Python
python 实现对文件夹内的文件排序编号
Apr 12 #Python
pandas数值计算与排序方法
Apr 12 #Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 #Python
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
处理Python中的URLError异常的方法
2015/04/30 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
详解python读取和输出到txt
2019/03/29 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
优秀辅导员事迹材料
2014/02/16 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书