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 client使用http post 到server端的代码
Feb 10 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
机器学习10大经典算法详解
Dec 07 Python
python实现黑客字幕雨效果
Jun 21 Python
python实现QQ批量登录功能
Jun 19 Python
详解python深浅拷贝区别
Jun 24 Python
Django框架反向解析操作详解
Nov 28 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Python tkinter三种布局实例详解
Jan 06 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
用Python将库打包发布到pypi
Apr 13 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获取网页上所有链接的方法
2015/04/03 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
浅谈Python中函数的参数传递
2016/06/21 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python获取url的返回信息方法
2018/12/17 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
python制作抽奖程序代码详解
2021/01/15 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
追悼会主持词
2014/03/20 职场文书
公司应聘求职信
2014/06/21 职场文书
教师党员个人整改措施
2014/10/27 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android