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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
linux下python使用sendmail发送邮件
May 22 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Python实现图像的垂直投影示例
Jan 17 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
python为什么要安装到c盘
Jul 20 Python
详解Python+OpenCV进行基础的图像操作
Feb 15 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
mui back 返回刷新页面的实例
2017/12/06 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python异常的检测和处理方法
2018/10/26 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
艺术用品:Arteza
2018/11/25 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
营销总经理的岗位职责
2013/12/15 职场文书
班组长岗位职责范本
2014/01/05 职场文书
集体婚礼策划方案
2014/02/22 职场文书
拉歌口号大全
2014/06/13 职场文书
防灾减灾标语
2014/10/07 职场文书
教师求职自荐信
2015/03/26 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server