前情提要

在之前的文章里,我们已经掌握从FTP上面下载天气数据然后插入到数据库中。

但是如何将我们已有的数据放到生产环境中呢?

思考

首先,我们先简单的理一理现在的情况。

目前: FTP上面已有半个月的天气数;每天会有2个txt文件产生 (每个文件大小约为 50~60 kb),由天气供应商负责上传到FTP上。 如图所示:

思路1:

经过简单的测试,每次读取一个txt文件然后写入数据库的时间大约为1s, 因此,可以考虑写一个小工具,从FTP上依次读取所有的txt, 然后插入数据库。也就是利用小工具到现场后再准备数据。

思路2:

直接将数据库文件导出,然后到现场部署的时候导入。

想好了就是干

① 思路1的解决方案

由于之前已经写好了FTP读取以及数据库插入数据的方法,这里只需要简单封装一下,即可满足我们的功能。 ~~~show me the code ~~

def fetch_insert_all_data():
ftp = FTPUtil('xxx.xxx.xxx.xxx')
ftp.Login('xxxxxx', 'xxxxxx') # create database and tables
nRet = preparation()
if nRet != 0:
print "Connect MySQL DB error!"
return # fetach all data from FTP and insert into database
for file in ftp.listFiles():
remote_file = file
local_file = file
if ftp.DownLoadFile(local_file, remote_file):
print "Download file {0} from FTP ok.".format(remote_file)
list_weather_tumple = decode_weather_from_txt(local_file)
nRet2 = insert_or_update_weather_data(list_weather_tumple)
if nRet2 >= 0:
print "Insert or update weather {0} ok.".format(remote_file)
else:
print "Insert or update weather {0} error!".format(remote_file) delete_file(local_file)
else:
print "Download file {0} from FTP error!".format(remote_file) ftp.close();

② 思路2的解决方案

首先,不得不说,虽然这种办法不用撸代码,但是需要 play 数据库啊; 经过了不断地尝试以及查找 。。。总结如下:

1. 导出数据库表(在 terminal上输入)

# mysqldump   -u root  -p weather_db  weather > /var/lib/mysql/weather.sql

按照提示,输入正确的password, 我们就可以看到导出的文件啦!

2. 导入数据库表

2.1 首先需要进入MySQL命令行

# mysql -u root -pxxxx

2.2 建立数据库

mysql> create database weather_db
mysql> use weather_db

这一点非常重要:因为我们的导出文件是基于数据库表的,数据库表需要依附于数据库

2.3 运行 SQL脚本

这里不得不吐槽一下,网上的童鞋说可以在terminal上面直接执行 SQL文件, 但是我这里一直出错!!!

当我 “不小心” (瞎尝试) 在MySQL的命令行中运行脚本, where amazing happend !!

OK, 让我们查看一下数据库表和数据,

~大功告成~

总结

总的来说,两种方法各有千秋:

方案1 需要花费更多的时间(收集 1天数据耗时约为 1s)。

方案2 需要我们将数据导入后,也许还需要再做一些插入操作(再插入几天的数据)。

Lastly, 感谢大家的收看,如果有更好建议也欢迎留言交流。

python + docker, 实现天气数据 从FTP获取以及持久化(四)-- 数据准备的更多相关文章

  1. python + docker, 实现天气数据 从FTP获取以及持久化(一)

    前情提要 最近项目需要天气数据(预报和历史数据)来作为算法程序的输入. 项目的甲方已经购买了天气数据, 依照他们的约定,天气数据的供应商会将数据以"文本" (.TXT)的方式发到F ...

  2. python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序

    背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...

  3. python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库

    前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用 ...

  4. python + docker, 实现天气数据 从FTP获取以及持久化(三)-- python获取FTP数据

    前言 经过前面两个小节的介绍,我们已经完成了MySQL数据库的搭建和数据库操作的事宜. 在本小节中,我们需要完成的任务是:使用python从FTP服务其上面获取文本文件. 搭建测试FTP服务器 LZ的 ...

  5. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  6. 毕设之Python爬取天气数据及可视化分析

    写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...

  7. python数据库操作常用功能使用详解(创建表/插入数据/获取数据)

    实例1.取得MYSQL版本 复制代码 代码如下: # -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Non ...

  8. Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照

    爬取背景 这套课程虽然叫爬虫入门类课程,但是里面涉及到的点是非常多,十分检验你的基础掌握的牢固程度,代码中的很多地方都是可以细细品味的. 为什么要写这么一个小东东呢,因为我生活在大河北,那雾霾醇厚的很 ...

  9. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

随机推荐

  1. 双击不能运行可执行的jar文件

    1.首先在命令行下运行jar包看文件是否报错(java -jar jar文件名称.jar)          如果程序中有System.out.println()语句,不想让其输出到控制台而保存到文件 ...

  2. python 获取列表的键值对

    nums = [, , , , ] for num_index, num_val in enumerate(nums): print(num_index, num_val)

  3. mac上将代码上传到github以及github对100M以上文件限制上传的处理(lfs)。

    前言 有时我们会写一些小程序来学习新的知识,但是完事之后过一段时间可能会忘记,最好的办法就是找到原来的代码看一看.现在可以将代码免费托管到一些网站上,其中最著名的非github莫属了, 今天就把这个过 ...

  4. mong大牛的blog

    MongoDB权威指南(3)-查询1.find方法介绍在不传入参数的情况下,find方法缺省使用  http://www.educity.cn/wenda/389594.html 这个归纳的比较好:可 ...

  5. uva-11021-全概率公式

    https://vjudge.net/problem/UVA-11021 有n个球,每只的存活期都是1天,他死之后有pi的概率产生i个球(0<=i<n),一开始有k个球,问m天之后所有球都 ...

  6. 51nod1347思维

    1347 旋转字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1… ...

  7. IOS-网络(HTTP请求、同步请求、异步请求、JSON解析数据)

    // // ViewController.m // IOS_0129_HTTP请求 // // Created by ma c on 16/1/29. // Copyright © 2016年 博文科 ...

  8. 前端ps切图,图文教程,详细。

    https://blog.csdn.net/OBKoro1/article/details/69817571 1.下载 我现在使用的版本号:PS-CS6,网上很多破解版本的自行搜索下载. 2.安装好P ...

  9. 最短路之SPFA算法

    部分来自:http://blog.csdn.net/juststeps/article/details/8772755 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了. ...

  10. jquery检测input checked 控件是否被选中的方法

    jquery检测input checked 控件是否被选中 js部分 复制代码代码如下: function tongyianniu(){ var gouxuan=$('input[type=check ...