Python psycopg2 cursor.fetchall()返回空列表但cursor.rowcount是> 1

时间:2017-09-18 07:37:20

标签: python sql postgresql python-3.x psycopg2

我在这里遇到问题:

conn = psycopg2.connect(conn_string)
cursor = conn.cursor()

sql = """
    SELECT DISTINCT (tenor_years) 
    FROM bond_pnl 
    WHERE country = '%s'
""" % country

cursor.execute(sql)
print(cursor.fetchall())
print(cursor.rowcount)

它提供以下输出:

[]
11

表示cursor.rowcount为11但cursor.fetchall()为空列表。我已经尝试过这样做了:

conn.set_session(readonly=True, autocommit=True)

以及此解决方案:Click to see

对此有任何帮助将不胜感激。

编辑:刚刚遇到另一件事,这个代码第一次执行时,工作正常。但是再次执行它(第二次,第三次,......执行)会产生上述行为。

2 个答案:

答案 0 :(得分:0)

在尝试不同的解决方案后,我发现当我在"调试模式"中执行它时,问题中描述的问题就出现了。在pycharm。但另一方面,如果我执行"运行模式"在pycharm中,它返回正确的预期输出(包含11个元素的列表):

[a,b,c,d,e,f,g,h,i,j,k]

不确定它的确切原因但不知何故,当在"调试模式"中运行时光标在某处断开。  如果有人描述确切的原因,我将非常感激。

答案 1 :(得分:0)

我也遇到了同样的问题。我想通了, 可能是在调试时,我们允许在建立连接后的一些时间 #conn = psycopg2.connect(conn_string) #cursor = conn.cursor()

当我们点击下一行(包含查询)的执行按钮时,数据库超时并返回空列表。

如果有人对发生这种情况的原因有任何其他逻辑,请分享。