Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL select语句确定滚动移动平均inPython计划时间事件_Python_Sql - Fatal编程技术网

使用SQL select语句确定滚动移动平均inPython计划时间事件

使用SQL select语句确定滚动移动平均inPython计划时间事件,python,sql,Python,Sql,我使用python脚本每小时报告一次价格数据库中的24小时滚动MA 在下面,我使用sched.scheduler为初始运行创建一个调度程序,然后每小时(3600秒)重新运行一次。我的问题是,24小时后,它开始将每日MA报告为“无”,这使我认为正在计算的时间(当前时间或间隔时间)是在脚本启动时计算的,而不是在每次触发计划事件时动态重新计算。 我尝试用python变量替换SQL“now()”变量,以捕获每次偶数触发时的当前时间,但没有效果 def get_daily_ma(): global

我使用python脚本每小时报告一次价格数据库中的24小时滚动MA

在下面,我使用sched.scheduler为初始运行创建一个调度程序,然后每小时(3600秒)重新运行一次。我的问题是,24小时后,它开始将每日MA报告为“无”,这使我认为正在计算的时间(当前时间或间隔时间)是在脚本启动时计算的,而不是在每次触发计划事件时动态重新计算。 我尝试用python变量替换SQL“now()”变量,以捕获每次偶数触发时的当前时间,但没有效果

def get_daily_ma():
    global get_daily_ma
    cursor.execute("SELECT AVG(price) AS DailyAvg FROM price_log.price WHERE date_time >= (now() - INTERVAL 24 HOUR)")
    get_daily_ma = cursor.fetchone()
    for row in get_daily_ma:
        print('Daily MA:' + str(row))



import sched, time
s = sched.scheduler(time.time, time.sleep)
def do_something(sc):
    try:
        get_daily_ma()           
    except Exception as error:
        if error is not None:
            print('Caught this error: ' + repr(error))
        else:
            print('Connected successfully to database')
        connect()
    s.enter(3600, 1, do_something, (sc,))

s.enter(1, 1, do_something, (s,))
s.run()
当前示例输出:

Daily MA:706.600501
Daily MA:705.500622
Daily MA:705.633035
Daily MA:705.072559
Daily MA:704.854059
Daily MA:704.022256
Daily MA:703.536127
Daily MA:703.123755
Daily MA:702.689111
Daily MA:702.492884
Daily MA:701.039226
Daily MA:700.661540
Daily MA:698.483458
Daily MA:697.863890
Daily MA:697.453988
Daily MA:697.432582
Daily MA:696.884967
Daily MA:696.159034
Daily MA:696.399219
Daily MA:695.599022
Daily MA:695.254403
Daily MA:695.671413
Daily MA:695.474621
Daily MA:697.200574
Daily MA:None
Daily MA:None
Daily MA:None
Daily MA:None
Daily MA:None
Daily MA:None

谢谢你的建议

正如Gordon所说,这不是SQL求值,而是唯一的另一种选择,即光标抓取要求值的记录。我将其更新为大约这个值,通过在循环中打开和关闭光标解决了问题

def get_daily_ma():
    cnx = mysql.connector.connect(...)
    cursor = cnx.cursor()
    cursor.execute("SELECT AVG(price) AS DailyAvg FROM price_log.price WHERE date_time >= (now() - INTERVAL 24 HOUR)")
    get_daily_ma = cursor.fetchone()
    cursor.close()
    cnx.close()
    for row in get_daily_ma:
        print('Daily MA:' + str(row))

每次运行查询时都应重新计算
now()
。时间间隔如何?这是否也应该在每次运行脚本时计算?表达式
now()-interval 24 hour
应该在每次运行数据库时计算。这是使用查询运行时数据库的时间框架,因此我不认为这会导致您的问题。嗨,Gordon,您是对的。当我打开和关闭光标时,这是一个问题。奇怪的是,您的数据是否每小时都在变化?最好的做法是在每次查询调用后始终关闭db对象,否则您将面临报告中的奇怪副作用。