2017-11-19 24 views
0

DB에 작업을 추가하고 스크립트가 다시 실행될 때 작업을로드하려고합니다. 다음 코드는 db에 추가하지만 스크립트를 다시 시작하면 작업이로드되지만 계속 실행됩니다. 작업 임포트가 올바르지 만 Wilde를 실행하는 이유를 알 수 없습니까?로드 된 작업이 DB에 저장되는 이유는 무엇입니까?

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, InlineQueryHandler 
import logging,sqlite3, datetime, json 
from telegram import Update 



# Enable logging 
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', 
        level=logging.INFO) 

logger = logging.getLogger(__name__) 
def seturl(bot,job): 
    bot.send_message(chat_id= job.context.message.chat_id, text=job.context.message.text) 

def userinfo(bot,update,job_queue): 
    interval = datetime.time(5) 
    context = update 
    db = sqlite3.connect('thedb.db') 
    job = job_queue.run_daily(seturl, interval, context=context) 

    with db as connection: 
     c = connection.cursor() 
     c.execute('INSERT INTO jobq(interval, context) VALUES (?, ?)', (str(interval), json.dumps(context.to_dict()))) 
    db.commit() 
    db.close() 

def error(bot, update, error): 
    """Log Errors caused by Updates.""" 
    logger.warning('Update "%s" caused error "%s"', update, error) 

def main(): 
    updater = Updater("TOKEN") 
    dp = updater.dispatcher 
    db = sqlite3.connect('thedb.db') 
    c = db.cursor() 
    c.execute("CREATE TABLE IF NOT EXISTS jobq(interval INTEGER, context TEXT)") 
    c.execute('SELECT * FROM jobq') 
    results = c.fetchall() 
    for row in results: 
     dp.job_queue.run_daily(seturl, datetime.datetime.strptime(row[0],"%H:%M:%S"), context = Update.de_json(json.loads(row[1]),dp.bot)) 

    dp.add_handler(MessageHandler(Filters.text , userinfo,pass_job_queue=True)) 
    db.commit() 
    db.close() 

    dp.add_error_handler(error) 

    updater.start_polling() 
    updater.idle() 

if __name__ == '__main__': 
    main() 

답변

0

다음은 내가 발견 한 해결책입니다. 우리는 DB에서로드 된 시간을 TEXT로 저장되는 날짜 시간 객체로 변환해야합니다.

내가 입력 한 코드에서 변환을 완료하기 위해 .time()을 추가해야했습니다.

dp.job_queue.run_daily(seturl, datetime.datetime.strptime(row[0],'%H:%M:%S').time(), context = Update.de_json(json.loads(row[1]),dp.bot))