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 crontab设置linux定时任务
Dec 08 Python
python实现多线程抓取知乎用户
Dec 12 Python
Python实现学生成绩管理系统
Apr 05 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
python实现聊天小程序
Mar 13 Python
Python之列表的插入&amp;替换修改方法
Jun 28 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
Python集合set()使用的方法详解
Mar 18 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
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
itchat接口使用示例
2017/10/23 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
总经理办公室主任岗位职责
2013/11/12 职场文书
会议邀请书范文
2014/02/02 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
单位委托书格式范本
2014/09/29 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle