当前位置: 首页 > 知识库问答 >
问题:

重复的SELECT为什么会返回相同的结果?

殳凯捷
2023-03-14

当我执行普通Select时,返回正确的结果,但当我执行Select for DB uptime时,它始终返回相同的第一个结果。我确实检查了Postgres日志,我看到select被执行了。


    #!/usr/bin/python3

    import psycopg2
    from time import sleep

    conn = psycopg2.connect("dbname='MyDB' user='root' host='127.0.0.1' password='********'")
    cur = conn.cursor()

    def test():
        e = 0
        while e != 100:
            cur.execute("SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;")
            uptv = cur.fetchone()
            print(uptv)
            e += 1
            sleep(0.1)

    test()

共有1个答案

岳时铭
2023-03-14

每个留档,current_timestamp返回事务开始时的时间戳。这种行为是SQL标准所要求的。

psycopg2在运行查询时开始事务。它不会自动提交。因此,除非您conn.commit(),否则第一次查询和以后的迭代将运行相同的xact。

你应该:

  • conn.commit();或
  • 使用clock\u timestamp()而不是current\u timestamp,因为前者在整个事务中都会发生变化

无论如何,最好避免让事务运行,因为它们会占用服务器需要的资源。

 类似资料:
  • 我正在尝试使用废料并遇到一些问题。问题是我的脚本返回重复的结果。我正在尝试从父页面抓取URL,并按照每个单独的URL获取关联的日期。抓取每个嵌套的URL后,它似乎会再次从父页面输出URL列表。 下面是脚本: 下面是 json 输出: 重申一下,我很难从父页面输出一个url列表,从每个单独的嵌套URL输出一个相应的日期列表。我是scrapy和python的新手,所以希望有人能给我指出正确的方向。

  • 问题内容: 为什么更改总和顺序会返回不同的结果? = = 双方的Java和JavaScript的返回相同的结果。 我知道,由于以二进制表示浮点数的方式,某些有理数( 例如1/3-0.333333 … )无法精确表示。 为什么简单地更改元素的顺序会影响结果? 问题答案: 也许这个问题很愚蠢,但是为什么仅仅改变元素的顺序会影响结果呢? 它将根据值的大小更改四舍五入的点。作为示例 _样的_事情,我们所看

  • 为什么改变求和顺序会返回不同的结果? = Java和JavaScript都返回相同的结果。 我知道,由于浮点数在二进制中的表示方式,一些有理数(如1/3-0.333333...)不能精确表示。 为什么简单地改变元素的顺序会影响结果?

  • 我从JS开始,实际上喜欢异步方面(来自Python),但我不确定为什么有些函数返回Promise。具体来说,下面使用的代码让我想知道返回了什么: 除了流之外,我们在之后得到的HTTP响应是一个文本块,客户端稍后会对其进行解释,以提取标题、正文和其他有趣的元素,作为HTTP内容分析的一部分。 关键是这个文本块是一块的,所以第一个已经有了整个响应——为什么JSON主体的解析是异步操作,不同于第二个?

  • 我已经在Python中通过,它们看起来都非常相似。为什么?如何随机化它们?

  • } 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En