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的面向对象思想分析
Jan 14 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
python 将md5转为16字节的方法
May 29 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
Python Django搭建文件下载服务器的实现
May 10 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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
PHP5 安装方法
2006/10/09 PHP
PHP新手上路(十三)
2006/10/09 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php合并js请求的例子
2013/11/01 PHP
php简单生成随机数的方法
2015/07/30 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python try except finally资源回收的实现
2021/01/25 Python
申论倡议书范文
2014/05/13 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
文秘应届生求职信
2014/07/05 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
免职证明样本
2014/10/23 职场文书
高中班主任评语
2014/12/30 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android