基于Python2.7的版本环境,Python实现的数据库跨服务器(跨库)迁移, 每以5000条一查询一提交,代码中可以自行更改每次查询提交数目.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# -*- 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