Python定时从Mysql提取数据存入Redis的实现


Posted in Python onMay 03, 2020

设计思路:

1.程序一旦run起来,python会把mysql中最近一段时间的数据全部提取出来

2.然后实例化redis类,将数据简单解析后逐条传入redis队列

3.定时器设计每天凌晨12点开始跑

ps:redis是个内存数据库,做后台消息队列的缓存时有很大的用处,有兴趣的小伙伴可以去查看相关的文档。

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

import MySQLdb
import schedule
import time
import datetime
import random
import string
import redis

# get the data from mysql
class FromSql(object):
  def __init__(self, conn):
    self.conn = conn

  def acquire(self):
    cursor = self.conn.cursor()
    try:
      sql = "SELECT * FROM test WHERE TO_DAYS(NOW()) - TO_DAYS(t) <= 1"

      cursor.execute(sql)
      rs = cursor.fetchall()
      #print (rs)
      for eve in rs:

        print('%s, %s, %s, %s' % eve)
      copy_rs = rs
      cursor.close()

      return copy_rs 

    except Exception as e:
      print("The error: %s" % e)


class RedisQueue(object):

  def __init__(self, name, namespace='queue', **redis_kwargs):
    """The default connection parameters are: host='localhost', port=6379, db=0"""
    self.__db= redis.Redis(**redis_kwargs)
    self.key = '%s:%s' %(namespace, name)

  def qsize(self):
    return self.__db.llen(self.key)

  def put(self, item):
    self.__db.rpush(self.key, item)

  def get(self, block=True, timeout=None):

    if block:
      item = self.__db.blpop(self.key, timeout=timeout)
    else:
      item = self.__db.lpop(self.key)

    if item:
      item = item[1]
    return item

  def get_nowait(self):
    return self.get(False)


if __name__ == "__main__":
  # connect mysqldb
  conn_sql = MySQLdb.connect(
            host = '127.0.0.1',
            port = 3306,
            user = 'root',
            passwd = '',
            db = 'test',
            charset = 'utf8'
            )


def job_for_redis():
    get_data = FromSql(conn_sql)
    data = get_data.acquire()

    q = RedisQueue('test',host='localhost', port=6379, db=0)
    for single_data in data:
      for meta_data in single_data:
        q.put(meta_data)
        print(meta_data)
    print("All data had been inserted.") 

"""
  try:
    schedule.every().day.at("00:00").do(job_for_redis)
  except Exception as e:
    print('Error: %s'% e)
#  finally:
#    conn.close()

  while True:
    schedule.run_pending()
    time.sleep(1)
"""

补充知识:python定时获取汇率存入数据库

python定时任务:

我们可以使用 轻量级的第三方模块schedule。首先先安装:pip install schedule

定时任务的的小测试:

import schedule
import time
 
def job():
  print("I'm working...")
 
schedule.every(10).minutes.do(job)       # 每隔10分钟执行一次任务
schedule.every().hour.do(job)          # 每隔一小时执行一次任务
schedule.every().day.at("10:30").do(job)    # 每天10:30执行一次任务
schedule.every(5).to(10).days.do(job)      # 每5-10天执行一次任务
schedule.every().monday.do(job)         # 每周一的这个时候执行一次任务
schedule.every().wednesday.at("13:15").do(job) # 每周三13:15执行一次任务
 
while True:
  schedule.run_pending()

获取数据存入数据库:(格式可能不太对,还有一些符号。自己修改一下即可)

import pymysql
import schedule
import time
import requests
import pandas
from sqlalchemy import create_engine

#获取美元的所有外汇
def job():
  content = '美元'
  url = 'http://www.boc.cn/sourcedb/whpj/index.html' #外汇数据地址
  html = requests.get(url).content.decode('utf-8')

  index = html.index('<td>' + content + '</td>')
  str = html[index:index+300]
  result = re.findall('<td>(.*?)</td>',str)

  print("币种:" + result[0])
  print("现汇买入价:" + result[1])
  print("现钞买入价:" + result[2])
  print("现汇卖出价:" + result[3])
  print("现钞卖出价:" + result[4])
  print("中行结算价:" + result[5])
  print("发布时间:" + result[6] + ' ' + result[7])
  
 #本地地址 数据库账号 密码  数据库名
  db = pymysql.connect('localhost','root','root','pinyougoudb')
  cursor = db.cursor()
  
 #sql语句
  sql = "update tb_money set huiBuy = %s,chaoBuy = %s,huiSale = %s,chaoSale = %s,centerResult= %s,publishTime = '%s' where typeId = '%s'" % (result[1], result[2], result[3], result[4], result[5], result[6] + ' ' + result[7], result[0])

  cursor.execute(sql)
  db.commit()
  print('success')

 # 查询语句,将存入的数据查出来
  # sqlalchemy 进行数据库初始化
  engine = create_engine('mysql+pymysql://root:root@localhost:3306/pinyougoudb')
  sql = '''select * from tb_money'''

  # pandas 进行数据库读写
  df = pandas.read_sql_query(sql,engine)
  print(df)

  db.commit()


# 每隔几分中刷新一次
#schedule.every(0.1).minutes.do(job)

#每天什么时候刷新
schedule.every().day.at("09:29").do(job)
schedule.every().day.at("09:30").do(job)

#一直循环 知道满足条件执行
while True:
  schedule.run_pending()

以上这篇Python定时从Mysql提取数据存入Redis的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现代理服务功能实例
Nov 15 Python
Python抓取京东图书评论数据
Aug 31 Python
python操作mysql中文显示乱码的解决方法
Oct 11 Python
Python实现删除Android工程中的冗余字符串
Jan 19 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python线程指南详细介绍
Jan 05 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
python里 super类的工作原理详解
Jun 19 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 Python
python函数调用,循环,列表复制实例
May 03 #Python
python轮询机制控制led实例
May 03 #Python
python 轮询执行某函数的2种方式
May 03 #Python
在Sublime Editor中配置Python环境的详细教程
May 03 #Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 #Python
Python使用pdb调试代码的技巧
May 03 #Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 #Python
You might like
PHP脚本的10个技巧(5)
2006/10/09 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
详解js闭包
2014/09/02 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python Requests库基本用法示例
2018/08/20 Python
基于python3实现倒叙字符串
2020/02/18 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
python线程优先级队列知识点总结
2021/02/28 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
校长先进事迹材料
2014/02/01 职场文书
运动会获奖感言
2014/02/11 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
家长写给孩子的评语
2014/04/18 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
教师群众路线心得体会
2014/11/04 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server