• 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

  • 相关阅读:
    用命令行执行ROBOT FRAMEWORK
    RF ---library
    RF--- selenium
    RIDE指定log和report的输出目录
    robotframework运行时后台报错UnicodeDecodeError
    rf-demos (request)
    RobotFramework --RIDE介绍
    基于RFS(robot framework selenium)框架模拟POST/GET请求执行自动化接口测试
    volatile非原子性示例
    wait()方法写在while循环中可以在线程接到通知后再一次判断条件
  • 原文地址:https://www.cnblogs.com/hapjin/p/7805820.html
Copyright © 2020-2023  润新知