python实现数据库跨服务器迁移
作者:Stupid_Sparrow 发布时间:2023-09-23 04:54:03
标签:python,数据库,迁移
基于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()
来源:https://blog.csdn.net/qq_27631797/article/details/79410277


猜你喜欢
- 1、查询SQL中的所有表: Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES W
- 一:区别:1、var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域;(js作用域在上篇文章) 2、var声
- 本文实例讲述了PHP函数按引用传递参数及函数可选参数用法。分享给大家供大家参考,具体如下:一、函数按引用传递参数1. 代码<!DOCT
- Python中函数参数的定义主要有四种方式:1. F(arg1,arg2,…)这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用
- 虽然每个图像具有多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来指示红、绿和蓝。但是到目前为止,我们仅展示了单个输入和单个输出通道的
- 目录前言1. 使用Lambda来修改Pandas数据框中的值2. 使用f-string来连接字符串3. 用Zip()函数对多个列表进行迭代4
- 一、Tensorflow安装1、Tensorflow介绍Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一。T
- python3的多行输入问题因为在OJ上做编程,要求标准输入,特别是多行输入。特意查了资料,自己验证了可行性。if __name__ ==
- 注释:在大多数的情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员。方法1使用phpmya
- 上文:成为一个顶级设计师的第二准则英文原文成为一个顶级设计师的第三准则:对比,对比,对比在设计里面,好的对比和你对颜色选择是密切相关的。对比
- mouseDown事件和mouseUp事件 大家知道,mouseDown事件和mouseUp事件的组合就是click事件,但是如果在链接上按
- MySQL表中的约束(constraint)为了保证数据的完整性,(数据的精确性和可靠性)SQL规范以约束的方式对表数据进行额外的条件限制,
- 古巴比伦王颁布了汉摩拉比法典,刻在黑色的玄武岩,距今已经三千七百多年,你在橱窗前…熟悉吧?没错,这就是周董的爱在西元前歌词。前不久工作不是很
- 影响 JavaScript性能的另外一个杀手就是递归,在上一节中提到采用memoization技术可以优化计算数值的递归函数,但memoiz
- 1 什么是嵌套循环所谓嵌套循环就是一个外循环的主体部分是一个内循环。内循环或外循环可以是任何类型,例如 while 循环或 for 循环。
- 现在我们已经知道了,fixtures是一个非常强大的功能。那么有的时候,我们可能会写一个fixture,而这个fixture所有的测试函数都
- sql exist的妙用create table b(a varchar(10),b varchar(10),c varchar(10))i
- 本文实例为大家分享了python实现教务管理系统,供大家参考,具体内容如下mysql+python构成教务管理系统,提供系统管理员,教职工,
- 定义线程最简单的方法:使用target指定线程要执行的目标函数,再使用start()启动。语法:class threading.Thread
- 一、复制的原理MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。每个从服务器从主服务器接收主服务器已经记录