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字符串排序方法
Aug 29 Python
python下MySQLdb用法实例分析
Jun 08 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
用Python制作灯光秀短视频的思路详解
Apr 13 Python
python实现学生信息管理系统(面向对象)
Jun 05 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 Ubb代码编辑器函数代码
2012/07/05 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
详解vue 组件的实现原理
2020/11/12 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Python中的zip函数使用示例
2015/01/29 Python
python PyTorch预训练示例
2018/02/11 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python 列表的清空方式
2020/01/13 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
python实现飞机大战项目
2020/03/11 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
亲子拓展活动方案
2014/02/20 职场文书
学习型班组申报材料
2014/05/31 职场文书
暑期培训心得体会
2014/09/02 职场文书
初婚初育证明范本
2015/06/18 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
如何书写邀请函?
2019/06/24 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python