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操作列表的常用方法分享
Feb 13 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
python多线程方式执行多个bat代码
Jun 07 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python实现拼接图片
Mar 23 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
5个pandas调用函数的方法让数据处理更加灵活自如
Apr 24 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的输出:缓存并压缩动态页面
2013/06/11 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
php中session定期自动清理的方法
2015/11/12 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
总结js函数相关知识点
2018/02/27 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
pandas修改DataFrame列名的方法
2018/04/08 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
网络信息管理员岗位职责
2014/01/05 职场文书
一名老师的自我评价
2014/02/07 职场文书
员工评语范文
2014/12/31 职场文书
节水宣传标语口号
2015/12/26 职场文书
商业计划书范文
2019/04/24 职场文书