gpt4 book ai didi

python - psycopg2 每次执行都会产生不同的表和游标不滚动到开头

转载 作者:行者123 更新时间:2023-11-29 13:26:44 26 4
gpt4 key购买 nike

我正在通过 python 的 psycopg2 包查询 postgresql 数据库。

简而言之:问题是每次我运行 psydopg2.cursor.execute() 命令时,psycopg2.fetchmany() 都会生成不同的表。

import psycopg2 as ps
conn = ps.connect(database='database', user='user')
nlines = 1000
tab = "some_table"
statement= """ SELECT * FROM """ + tab + " LIMIT %d;" %(nlines)
crs.execute(statement)

然后我分段获取数据。运行以下命令执行得很好,每次当我滚动回开头时,我都会得到相同的结果。

rec=crs.fetchmany(10)
crs.scroll(0, mode='absolute')
print rec[-1][-2]

但是,如果我再次运行 crs.execute(statement) 然后获取数据,它会产生完全不同的输出。我尝试再次运行 ps.connect,执行 conn.rollback()、conn.reset()、crs.close() 并且没有任何结果导致表的一致输出.我还尝试了启用可滚动的命名游标

crs= conn.cursor(name="cur1")
crs.scrollable=1
...
crs.scroll(0, mode= 'absolute')

仍然没有运气。

最佳答案

您的查询中没有任何 ORDER BY 子句,Postgres 不保证没有任何特定的顺序。它特别有可能更改具有大量变动(即大量插入/更新/删除)的表的顺序。

参见 Postgres SELECT doc有关更多详细信息,但这里最突出的片段是:

If the ORDER BY clause is specified, the returned rows are sorted in the specified order. If ORDER BY is not given, the rows are returned in whatever order the system finds fastest to produce.

无论使用何种类型的游标,我都不希望任何查询在给定此类查询的情况下必然返回完全相同的结果集。

当您添加显式 ORDER BY 时会发生什么?

关于python - psycopg2 每次执行都会产生不同的表和游标不滚动到开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com