2022年6月7日 13:41 by wst
python小技巧今天写了个导出导入MySQL的代码,本来没想这么复杂。
尝试路径如下:
1. 想通过工具实现,无奈工具下载后连接不到库。
因为安全原因,设置库只能本机访问,那么就需要先访问服务器,然后连接库,不知为啥老是报超时,试了n遍也不行。
2. 用mysql自带的命令吧,但是搜了半天也没发现好用的。要么就是改库的安全设置,要么就是导出后,导入报错。放弃。
3. 实在不行,那我就自己写代码导,不用依赖任何工具了。只用python就好。
代码如下:
#!/usr/bin/env python
"""
FileName: migrate
Author: wst
Email: movingheart000@gmail.com
Date: 2022/6/7 12:08:51
Desc: 迁移数据库
"""
import pymysql
import logging
from logging.handlers import TimedRotatingFileHandler
MYSQL_CONFIG = {
"formal": {
"host": '127.0.0.1',
"user": "root",
"password": "11111111",
"db": "t_whqj",
"charset": "utf8",
},
"mongo_to_mysql": {
"host": '127.0.0.1',
"user": "root",
"password": "11111111",
"db": "whqj",
"charset": "utf8",
},
}
def init_log(log_name):
logging.basicConfig(level=logging.INFO)
# m 代表分钟,h 代表小时,d 代表天;backupCount 代表备份的天数
console = TimedRotatingFileHandler("%s" % log_name, when='d', backupCount=10)
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
console.setFormatter(formatter)
logging.root.addHandler(console)
# 如果不想在命令行窗口输出,去掉下一行的注释
# logging.root.handlers.pop(0)
def export_data(table, columns):
""" 导出数据 """
conn_wl = pymysql.connect(**MYSQL_CONFIG["formal"])
cur_wl = conn_wl.cursor()
conn = pymysql.connect(**MYSQL_CONFIG["mongo_to_mysql"])
cur = conn.cursor()
sql_wl = "select %(columns)s from %(table)s;" % {'columns': ",".join(columns), 'table': table}
sql = """insert into %(table)s(%(columns)s) values(%(v)s);""" % {
'columns': ",".join(columns), 'table': table, "v": ",".join(['%s' for _ in range(len(columns))])}
res_wl = cur_wl.execute(sql_wl)
size = 100
rows = cur_wl.fetchmany(size)
while rows:
logging.info("The batch ...")
cur.executemany(sql, rows)
conn.commit()
rows = cur_wl.fetchmany(size)
cur.close()
cur_wl.close()
conn.close()
conn_wl.close()
if __name__ == "__main__":
init_log("mydata.log")
logging.info("Start ...")
# # 迁移运输工具表
# columns = ('create_time', 'update_time', 'name', 'phone', 'note', 'state', 'vehicle_type_id', 'picture', 'id')
# export_data("conveyance", columns)
# # 迁移机器表
# columns = ('id', 'platform', 'account', 'config', 'system', 'end_date', 'ip_inner', 'ip', 'create_time', 'note')
# export_data("source_machine", columns)
# # 迁移机器账号表
# columns = ('id', 'user', 'password', 'create_time', 'note', 'ip_id')
# export_data("source_machineaccount", columns)
# 迁移域名表
columns = ('id', 'domain', 'owner', 'record_number', 'create_time', 'note', 'ip_id', 'machine_id')
export_data("source_domain", columns)
logging.info("Done!")
版权声明:
本文刊载的所有内容,包括文字、图片以及网页版式设计等均为本人自主创作,访问者可将本文提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文及作者的合法权利。除此以外,将本文任何内容或服务用于其他用途时,须征得本人的书面许可,并支付报酬。email: movingheart000@gmail.com, wx:wst_ccut