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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
window下eclipse安装python插件教程
Apr 24 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
python3.6使用SMTP协议发送邮件
May 20 Python
Python如何输出警告信息
Jul 30 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
详解如何修改python中字典的键和值
Sep 29 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 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代码
2011/11/27 PHP
orm获取关联表里的属性值
2016/04/17 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
python实现决策树分类算法
2017/12/21 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
学生会主席事迹材料
2014/01/28 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
租房协议书
2014/09/12 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
三年级上册科学教学计划
2015/01/21 职场文书