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实现给文件添加内容及得到文件信息的方法
May 28 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
python打印异常信息的两种实现方式
Dec 24 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
python flask框架快速入门
May 14 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 开发环境配置(Zend Studio)
2010/04/28 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python 同时读取多个文件的例子
2019/07/16 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
浅析Python 责任链设计模式
2020/09/11 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
顺丰快递Java软件工程师面试题
2015/07/31 面试题
工程部经理岗位职责
2013/12/08 职场文书
安全生产汇报材料
2014/02/17 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
vue实现列表垂直无缝滚动
2022/04/08 Vue.js