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 相关文章推荐
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
python中return的返回和执行实例
Dec 24 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
详解python中的异常捕获
Dec 15 Python
python复合条件下的字典排序
Dec 18 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
世界上第一台立体声收音机
2021/03/01 无线电
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
使用pandas读取文件的实现
2019/07/31 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
python3 enum模块的应用实例详解
2019/08/12 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
Python实现京东抢秒杀功能
2021/01/25 Python
应届护士推荐信
2013/11/16 职场文书
初中语文教学反思
2014/02/02 职场文书
五年级数学教学反思
2014/02/11 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
法制宣传教育方案
2014/05/09 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
如何用PHP实现多线程编程
2021/05/26 PHP
SSM VUE Axios详解
2021/10/05 Vue.js
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android