zoukankan      html  css  js  c++  java
  • Python3.6 Schedule模块定时任务

    本文使用Python的Schedule模块、Python访问数据库的框架SQLAIchemy 实现了一个:周期性读取mysql 数据的小示例。

    一,编程环境

    PyCharm2016,Anaconda3 Python3.6

    需要安装schedule模块,该模块网址:https://pypi.python.org/pypi/schedule

    打开Anaconda Prompt,输入:conda install schedule 提示:Package Not Found Error

    于是,使用 pip 安装。由于Anaconda3 中已经自带了pip,如下图:

    于是 cmd 命令行切换到 scripts 目录,执行 pip.exe install schedule 安装成功。这样就可以在PyCharm里面 import schedule 了

    二, 在每天某个指定的时间点上,从数据库中查找数据然后写入 csv 文件

    ①使用 sqlalchemy 模块来建立数据库连接,关于windows 下 python3.6 for mysql 驱动安装,可参考:windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结

    ②使用schedule 模块来执行周期性任务。关于该模块的用法,可参考官网示例

    ③使用csv模块将查询到的记录写入文件

    整个完整代码如下:

    import schedule
    import codecs
    import csv
    import time
    from sqlalchemy import create_engine
    
    def get_conn():
        engine = create_engine("mysql+pymysql://root:password@localhost:3306/test?charset=utf8mb4")
        conn = engine.connect()
        return conn
    
    def query():
        sql = "select * from user limit 10"
        conn = get_conn()
        return conn.execute(sql)
    
    def read_mysql_to_csv(filename):
        with codecs.open(filename=filename, mode='w') as f:
            write = csv.writer(f, dialect='excel')
    
            results = query()
            for result in results:
                write.writerow(result)
    
    schedule.every().day.at("17:49").do(read_mysql_to_csv, "test")
    while True:
        schedule.run_pending()
        time.sleep(10)

    三,总结

     schedule 模块可以非常方便地实现:周期性地在每天的某个时间点上执行任务。其官方示例如下:

     1 import schedule
     2 import time
     3 
     4 def job():
     5     print("I'm working...")
     6 
     7 schedule.every(10).minutes.do(job)
     8 schedule.every().hour.do(job)
     9 schedule.every().day.at("10:30").do(job)
    10 schedule.every().monday.do(job)
    11 schedule.every().wednesday.at("13:15").do(job)
    12 
    13 while True:
    14     schedule.run_pending()
    15     time.sleep(1)

    另外,关于 Sqlalchemy 的中文资料感觉好少,而官网的示例看起来又比较困难。推荐一本英文版书籍:《essential sqlalchemy》。这本书讲了很多可直接运行的示例程序,比官网上的示例要更容易理解。

    参考链接:https://github.com/dbader/schedule

    原文:http://www.cnblogs.com/hapjin/p/7805820.html

  • 相关阅读:
    九度OJ 1333:考研海报 (区间操作)
    九度OJ 1326:Waiting in Line(排队) (模拟)
    九度OJ 1325:Battle Over Cities(城市间的战争) (并查集)
    九度OJ 1324:The Best Rank(最优排名) (排序)
    九度OJ 1323:World Cup Betting(世界杯) (基础题)
    九度OJ 1283:第一个只出现一次的字符 (计数)
    九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
    九度OJ 1261:寻找峰值点 (基础题)
    SDWebImage
    MBProgressHUDDemo
  • 原文地址:https://www.cnblogs.com/hapjin/p/7805820.html
Copyright © 2011-2022 走看看