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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python递归全排列实现方法
Aug 18 Python
python将控制台输出保存至文件的方法
Jan 07 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
python3中for循环踩过的坑记录
Dec 14 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
Python机器学习之底层实现KNN
Jun 20 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 单引号与双引号的区别
2009/11/24 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
php上传文件常见问题总结
2015/02/03 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python3实现飞机大战游戏
2020/04/24 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
Java如何格式化日期
2012/08/07 面试题
外国语学院毕业生自荐信
2013/10/28 职场文书
留学推荐信中文范文三篇
2014/01/25 职场文书
世博会口号
2014/06/20 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
导游词300字
2015/02/13 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫