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编写简单文件夹内图片浏览工具
Aug 17 Python
python list转矩阵的实例讲解
Aug 04 Python
Python3中关于cookie的创建与保存
Oct 21 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python序列类型的打包和解包实例
Dec 21 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Django 解决由save方法引发的错误
May 21 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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的session cookie错误
2009/08/09 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
python 实现A*算法的示例代码
2018/08/13 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
材料采购员岗位职责
2013/12/17 职场文书
中班开学寄语
2014/04/04 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书