python cx_oracle cursor.rowcount返回0但cursor.fetchall返回数据

时间:2017-08-31 16:35:35

标签: python sql database oracle11g cx-oracle

我有这段代码,我使用select sql包从python代码执行cx_oracle语句:

import cx_Oracle

try:
    cur = conn.cursor()
    result = cur.execute('select * from table1')
    print(str(cur.rowcount))
    print(cur.fetchall())

except Exception as e:
    print(e)

当我执行上述代码时,我看到0进入了cur.rowcount,但我看到为cur.fetchall()打印了以下数据:

[('185',), ('1860',), ('1908',)]

cx_Oracle package documentation确实提到Cursor.rowcount作为有效操作,所以我不确定为什么在我的代码中它会返回0,即使数据来了?

2 个答案:

答案 0 :(得分:5)

文档说明cursor.rowcount指定当前获取的行数。在完成cursor.execute()调用之后,没有提取任何行,因此结果为0.如果调用cursor.fetchone(),则结果为1,如果调用cursor.fetchmany(5),则结果将是6,依此类推(假设有足够的行来满足您的请求,当然!)。

答案 1 :(得分:0)

cx-oracle.readthedocs提到Cursor.rowcount指定受insert,update和delete语句影响的行数。您正在使用select语句。

cur.execute('select * from table1')
result = cur.fetchall()
print (len(result)) # this will return number of records affected by select statement
print (result)