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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python3序列化与反序列化用法实例
May 26 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
python比较两个列表大小的方法
Jul 11 Python
python中map()与zip()操作方法
Feb 27 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
利用Django-environ如何区分不同环境
Aug 26 Python
Python3.5文件修改操作实例分析
May 01 Python
python async with和async for的使用
Jun 20 Python
python实现控制COM口的示例
Jul 03 Python
Django admin model 汉化显示文字的实现方法
Aug 12 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防止form重复提交的方法
2013/07/01 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
详解Vue组件之作用域插槽
2018/11/22 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
对python requests发送json格式数据的实例详解
2018/12/19 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
自我评价200字分享
2013/12/17 职场文书
校长就职演讲稿
2014/01/06 职场文书
销售口号大全
2014/06/11 职场文书