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中表示字符串的三种方法
Sep 06 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
java判断三位数的实例讲解
Jun 10 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
Python 求数组局部最大值的实例
Nov 26 Python
python队列原理及实现方法示例
Nov 27 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
python简单利用字典破解zip文件口令
Sep 07 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
帕克纽约:PARKER NY
2018/12/09 全球购物
教师自荐书
2013/10/08 职场文书
岗位职责风险点
2014/03/12 职场文书
产品质量承诺范本
2014/03/31 职场文书
家庭教育的心得体会
2014/09/01 职场文书
接收函格式
2015/01/30 职场文书
员工手册编写范本
2015/05/14 职场文书
工作服管理制度范本
2015/08/06 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
基于Python实现将列表数据生成折线图
2022/03/23 Python