按当前时间查询 (postgres, psycopg2, python)

3
我正在开发一个使用psycopg2查询postgreSQL数据库的Flask应用程序。该数据库有一个格式为YYYY-MM-DD HH:MI:SS的时间戳列。我想仅打印与当前时间(即我查询数据库的时刻)匹配的结果。我认为我需要一个动态查询。
例如,这里我想要打印当前活跃用户的数量。
def userCount(conn):
    cur = conn.cursor()
    cur.execute("SELECT * from user_list WHERE timestamps = ?")
    print 'Users currently active: ' + str(len(cur.fetchall()))

我尝试在上方问号的位置放置了几个不同的东西,包括使用Python的datetime模块定义的变量 dt 。 但是没有起作用 - 我要么得到了数据库中所有用户的计数,要么出现了列不存在的错误。

再次强调,我知道如何指定日期时间参数,但我需要的是当前日期时间。该如何正确实现?


1
定义活跃。最后5分钟?10分钟? - Clodoaldo Neto
from datetime import datetime then cur.execute("SELECT * from user_list WHERE timestamps = %s", (datetime.now().replace(microsecond = 0),)) - Abelisto
@ClodoaldoNeto 我需要最近的数据,所以我认为只需要最近的1分钟。我需要忽略末尾的秒数。 - Sarah
将时间截断到分钟将返回从0到60秒的活动。您需要进行日期算术运算。 - Clodoaldo Neto
@Abelisto 我觉得第二种解决方案可行!!!!!!!!! 我设置了不同的时间间隔进行测试,现在似乎显示的数字是正确的。非常感谢你! - Sarah
显示剩余6条评论
2个回答

3
 intervalInSecs = 30;

 def userCount(conn):
        cur = conn.cursor()
        cur.execute("SELECT * from user_list WHERE timestamps > (current_timestamp - make_interval(secs := %s))", [intervalInSecs])
        print 'Users currently active: ' + str(len(cur.fetchall()))

0

你能使用数据库日期吗?

WHERE timestamps = current_date

或者,如果该值以字符串形式存储:

WHERE timestamps = TO_CHAR(current_date, 'YYYY-MM-DD')

刚刚尝试了current_date。没有错误,但它并没有做我想要的事情。它返回数据库中所有用户的计数,并没有按当前日期/时间进行过滤。 - Sarah
@Sarah current_date 返回的是当前日期,不包括时间部分。请使用 date_trunc('secs', current_timestamp) 代替。 - Abelisto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接