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

前言

在这一节中,我们主要介绍如何使用python操作MySQL数据库。

准备

MySQL数据库使用的是上一节中的docker容器 “test-mysql”.

Python 操作 MySQL

我们使用的IDE是 “神奇” 的 pycharm:

1. 首先新建一个python的项目,并且安装 “mysql-connector-python”。

“mysql-connector-python” 是MySQL官方对于python的数据驱动,感兴趣的童鞋可以移步这里: https://dev.mysql.com/doc/connector-python/en/

2. 创建 MySQLUtil.py

基于上一节的介绍,我们的任务是要读取FTP上的文本文件,从中解析出天气数据,并且插入到数据库表中(持久化)。因此,我们将基本的数据库操作都封装到这个python 文件中。

3.  准备工作 -- 在第一次连接的时候需要DDL操作(创建相应的数据库和表); 之后的的操作是DML(增/删/改/查)

# -*- coding: utf-8 -*-

from __future__ import print_function

import mysql.connector
from mysql.connector import errorcode

config_prepare = {
  ‘user‘: ‘root‘,
  ‘password‘: ‘password‘,
  ‘host‘: ‘127.0.0.1‘,
  #‘database‘: ‘weather_db‘,
  ‘raise_on_warnings‘: True,
}

config_op = {
  ‘user‘: ‘root‘,
  ‘password‘: ‘password‘,
  ‘host‘: ‘127.0.0.1‘,
  ‘database‘: ‘weather_db‘,
  #‘raise_on_warnings‘: True,
}

def preparation(db_name=‘weather_db‘, table_name=‘weather‘):
    try:
        cnx = mysql.connector.connect(**config)
    except mysql.connector.Error as err:
        print(err)
        return (-1)

    # try use db or create it
    try:
        cursor = cnx.cursor()
        cursor.execute("CREATE DATABASE IF NOT EXISTS {} DEFAULT CHARACTER SET ‘UTF8MB4‘".format(db_name))
        cnx.database = db_name
    except mysql.connector.Error as err:
        print(err)
        #return (-2)

    # Create table if not exist
    try:
        cnx.database = db_name
        cursor = cnx.cursor()
        createTableSql = """CREATE TABLE IF NOT EXISTS `weather`  (         `weather_timestamp` varchar(32) NOT NULL,          `weather_data` varchar(256) NOT NULL,           PRIMARY KEY (`weather_timestamp`)         ) ENGINE=InnoDB;"""

        cursor.execute(createTableSql)
        cursor.close()
    except mysql.connector.errorcode as err:
        print(err.msg)
        return (-3)

    print ("Preparation OK")

    return (0)

4. 插入或更新数据

def insert_or_update_weather_data(datas):
    sql = "INSERT INTO weather(weather_timestamp, weather_data) "             "VALUES(%s,%s)"             "ON DUPLICATE KEY UPDATE weather_data = VALUES(weather_data);"

    try:
        cnx = mysql.connector.connect(**config_op)

        cursor = cnx.cursor()
        cursor.executemany(sql, datas)

        cnx.commit()

    except mysql.connector.errorcode as e:
        print(‘Error:‘, e)
        return (-1)

    finally:
        cursor.close()
        cnx.close()

    return (0)

PS: 由于天气数据是由供应商提供,提供的方式是 每日两次(早上8点;下午5点)放到FTP上面,每次提供7天的天气预报。 因此,当我们读取天气数据的时候,有一段时间的数据是重合的。因此采用插入或更新 (表中没有天气数据时:插入; 有数据时:更新)的方式来处理。

5. 根据时间条件,读取天气数据

def query_weather_data(begin_time_stamp, end_time_stamp):

    sql = "SELECT weather_timestamp, weather_data FROM weather "             "WHERE weather_timestamp BETWEEN %s AND %s;"

    try:
        cnx = mysql.connector.connect(**config_op)

        cursor = cnx.cursor()
        # The second parameter must be a tuple that contains all the delimeters

        cursor.execute(sql, (begin_time_stamp, end_time_stamp)) 
        rows = cursor.fetchall()

        return rows

    except mysql.connector.errorcode as e:
        print(‘Error:‘, e)
        return []

    finally:
        cursor.close()
        cnx.close()

6. 最后附上测试代码

if __name__ == ‘__main__‘:
    print("=== Unit test begin ===")

    # Test prepareation
    nRet = preparation()

    # Test insert or update datas in ‘weather‘ table
    datas1 = (
        (‘201804280000‘, ‘0.0    0.0    0.0    16.461    95.163    6.038    97.493    1013.791‘),
        (‘201804280015‘, ‘0.0    0.0    0.0    16.347    95.532    6.046    97.606    1013.713‘),
        (‘201804280030‘, ‘0.0    0.0    0.0    16.233    95.901    6.055    97.719    1013.634‘),
        (‘201804280045‘, ‘0.0    0.0    0.0    16.139    96.269    6.063    97.832    1013.556‘),
    )
    nRet1 = insert_or_update_weather_data(datas1)

    datas2 = (

        (‘201804280030‘, ‘{data1:0.0, data2:0.0, data3:0.0, data4:16.233, data5:95.901, data6:6.055, data7:97.719, data8:1013.030}‘),
        (‘201804280045‘, ‘{data1:0.0, data2:0.0, data3:0.0, data4:11.111, data5:93.901, data6:6.099, data7:97.700, data8:1013.045}‘),
    )
    nRet2 = insert_or_update_weather_data(datas2)

    # Test query data from ‘weather‘ table
    ret_list = query_weather_data(‘201804270000‘, ‘201804280040‘)
    if len(ret_list) == 0:
        print ("No data queried out.")
    else:
        for timestamp, data in ret_list:
            print (‘timestamp:%s data:%s‘ %(timestamp, data))

    print("=== Unit test done ===")

小结

至此,我们操作MySQL的工具代码就全部编写完成。 在下一节中,我们将着重FTP部分的说明。

感谢大家的收看,欢迎积极留言讨论~~

原文地址:https://www.cnblogs.com/atuotuo/p/9191589.html

时间: 2024-10-13 14:13:49

python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库的相关文章

使用python操作mysql数据库

这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector-python 是MySQL官方的Python驱动 https://dev.mysql.com/doc/connector-python/en/ 安装: pip install mysql-connector 示例代码: https://github.com/mike-zhang/pyExample

Python MySQLdb模块连接操作mysql数据库实例_python

mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/有下载和文档. 由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码: #-*- encoding: gb2312 -*- import os, sys, string impo

python操作mysql数据库(一)

最近又开始重新学习python,研究了一些python操作mysql数据库的知识,记录在此,用作学习笔记, 基础环境:Python 3.5.1 mysql版本:5.6.35 (rpm安装方式) 操作系统:Centos7.3 和windows7 一.python连接数据库模块介绍: 目前主要用的有以下几种.MySQLdb和pymsql以及mysql官方提供的mysql-connector-python驱动,MySQLdb模块是python2.X使用比较多的,而python3.X使用的pymsql会

Python快速学习第九天--安装并操作Mysql数据库

python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载

【转】python操作mysql数据库

python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载

python 之操作mysql 数据库实例

对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delete 需要进行提交才能生效.)4. 获取结果5. 关闭连接.关闭游标 一.默认获取的结果是元祖 1 conn = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='sakila',charset='ut

Python使用DB-API操作MySQL数据库

Python提供了一个标准数据库API,称为DB-API,用于处理基于SQL的数据库.与任何底层数据库的交互都可以使用DB-API,因为DB-API在代码与驱动程序之间提供了一个抽象层,可以根据需要替换底层数据库,而无需丢弃现有的代码. DB-API与底层数据库交互示例:①代码 ? ②使用DB-API ? ③数据库驱动程序 ? ④底层数据库(如MySQL等) 使用DB-API操作MySQL数据库例子1.Windows安装MySQL数据库驱动程序MySQL-Connector/Python 访问M

Linux下使用Python操作MySQL数据库

安装mysql-python 1.下载mysql-python 打开终端: cd /usr/local sudo wget http://nchc.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz 官网地址:http://sourceforge.net/projects/mysql-python/ 2.解压 sudo tar -zxvf MySQL-python-1.2.2.tar.gz cd MySQL-

python 操作mysql数据库之模拟购物系统登录及购物

python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TABLE userinfo ( u_id int(10) not null auto_increment, u_name varchar(35), u_passwd varchar(35), money decimal(10,2), role int(5), primary key(u_id) )CHA