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 相关文章推荐
python解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
实例讲解Python中的私有属性
Aug 21 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
Python多进程同步简单实现代码
Apr 27 Python
python自带的http模块详解
Nov 06 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python语音识别实践之百度语音API
Aug 30 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
解决paramiko执行命令超时的问题
Apr 16 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
用python实现一个简单计算器(完整DEMO)
Oct 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
php 设计模式之 工厂模式
2008/12/19 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python列表(list)常用操作方法小结
2015/02/02 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
pywinauto自动化操作记事本
2019/08/26 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
金讯Java笔试题目
2013/06/18 面试题
老总助理工作岗位职责
2014/02/06 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书