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中使用urllib2防止302跳转的代码例子
Jul 07 Python
解决Python传递中文参数的问题
Aug 04 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
python线程池threadpool使用篇
Apr 27 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
Python 多进程、多线程效率对比
Nov 19 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 Python
总结python多进程multiprocessing的相关知识
Jun 29 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链接MySQL的常用扩展函数
2014/10/23 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
javascript 写类方式之十
2009/07/05 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
flask框架中的cookie和session使用
2021/01/31 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
化学教师教学反思
2014/01/17 职场文书
小学教师培训感言
2014/02/11 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
助理政工师申报材料
2014/06/03 职场文书
银行奉献演讲稿
2014/09/16 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
学生自我评语
2015/01/04 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
结婚堵门保证书
2015/05/08 职场文书
放飞理想主题班会
2015/08/14 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js