web-dev-qa-db-ja.com

python cx_Oracle cursor.rowcountは0を返しますが、cursor.fetchallはデータを返します

_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パッケージドキュメント は_Cursor.rowcount_を有効な操作として言及しているので、データが届いているにもかかわらず、コードで_0_が返される理由がわかりませんか?

8
user2966197

ドキュメントには、cursor.rowcountが現在フェッチされている行数を指定することが記載されています。 cursor.execute()を呼び出した直後は、行がフェッチされていないため、結果は0です。cursor.fetchone()を呼び出すと、結果は1になり、cursor.fetchmany(5)を呼び出すと、結果は6などになります(もちろん、要求を満たすのに十分な行があると仮定します!)。

7

cx-Oracle.readthedocs 言及されたCursor.rowcountは、挿入、更新、削除ステートメントの影響を受ける行数を指定しました。 selectステートメントを使用しています。

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