本文使用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