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