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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM