刷新/重新加载 Python 脚本的部分而不重新加载整个脚本

时间:2021-07-10 16:32:34

标签: python loops bots refresh telegram-bot

我有一个使用 python 创建 Telegram 机器人的个人项目。我想要的是用从数据库查询生成的动态答案来回答任何问题。我不想为来自 bot 的每个请求创建数据查询,所以我的想法是生成一组数据(数据框),然后 bot 可以从那里获取答案。为了生成数据框,我想每 x 分钟安排/重新加载查询脚本的一部分。我的目标是创建 Python 脚本,该脚本只能在查询数据时重新加载,而无需重新加载整个脚本。有没有办法做到这一点? 示例代码:

tt = datetime.now()

dsn_tns = cx_Oracle.makedsn(----)
conn = cx_Oracle.connect(user=----, password=----, dsn=dsn_tns)

cursor = conn.cursor()
sql = ("""select *
from TABLE
WHERE REPORTDATE > to_date(:tt,'DD-MM-YYYY HH24:MI:SS')""")
param = {"tt": tt}

data = psql.read_sql(sql,conn)#,params = param)
conn.close()

x = 2314 #value from question via bot

answer = data[(data['number'] == x))]

我想定期重新加载的部分是从 tt 到 conn.close()。

1 个答案:

答案 0 :(得分:0)

我不确定您为什么不想为每个机器人请求重新运行查询,这更有意义。如果您不为每个机器人请求更新数据,您似乎也可能丢失数据。

但是,您可以将 tt 和 conn.close() 之间的代码包装在一个可以设置为定期运行的函数中。

def update_data()
    global data
    tt = datetime.now()

    dsn_tns = cx_Oracle.makedsn(----)
    conn = cx_Oracle.connect(user=----, password=----, dsn=dsn_tns)

    cursor = conn.cursor()
    sql = ("""select *
    from TABLE
    WHERE REPORTDATE > to_date(:tt,'DD-MM-YYYY HH24:MI:SS')""")
    param = {"tt": tt}

    data = psql.read_sql(sql,conn)#,params = param)
    conn.close()