python操作データベース取得結果のfetchとfetch allの違いについて説明します。


pythonを使って検索結果を得るたびに、fetchoneとfetch allを使うのか悩んでいますが、エラーを報告するのは難しいです。その違いと使用シーンがはっきりしていないことがポイントです。
fetchとfetch allの違い
環境:python 3で
fetch
検索結果が複数のデータであろうと、単一のデータであろうと、fetchoneを使って得られるのは一貫して一つのタプルです。
検索結果が単一データである場合:fetwinで得られた単一データのタプル;
検索結果が複数のデータであれば、fetoneはデフォルトでは結果の最初のデータからなるタプルです。
これで決定しました。タプルの数値を取るには、cur.fetwin[0]を使う必要があります。
fetch.
検索結果が複数のデータであろうと、単一のデータであろうと、fetchを使って得られるのは常に元のグループからなるリストです。
検索結果が単一のデータである場合:fetch allは単一のタプルからなるリストであり、リスト内には単一のデータからなるタプル、つまりリストにはタプルが含まれています。
検索結果が複数のデータである場合:fetch allは複数のタプルからなるリストを取得します。
これにより、タプルの値を取るためには、cur.fetchone[0][0]を使う必要があります。
使用シーン
一般的に、検索結果集は単一データで、fetchを使ってデータを取得します。
一般的に、検索結果集は複数のデータで、fetch allを使ってデータを取得します。
簡単な例

import cx_Oracle
conn = cx_Oracle.connect("   /  @     ")
cur = conn.cursor()
sql_3 = "select id from CZEPT_BSDT t WHERE name='{}'".format("      ")
cur.execute(sql_3)
result_3 = cur.fetchone() #        
print(result_3)  # (1,)
print(type(result_3)) # <class 'tuple'>
result_3= result_3[0] 
print(result_3)  # 1
print(type(result_3)) # <class 'int'>
print("*" * 50)
sql_2 = "select * from CZEPT_BSDT "  
cur.execute(sql_2)
result_2 = cur.fetchall()  #        
print(result_2)  # [(1,'      '),(3,'      '),(5,'      ')]
print(type(result_2))  # <class 'list'>
result_2= result_2[0][0]
print(result_2)   # 1
print(type(result_2))  # <class 'int'>
注意事項
fetchoneとfetch allを使って取得した結果は、使用前に空でないと判断した方がいいです。空の値がある場合は元のグループのデータを取得すると、「インデックスオーバー」という異常があります。何度も地雷を踏みました。

import cx_Oracle
connection = cx_Oracle.connect('   /  @     ')
cur = connection.cursor()
for j in data_list:
    sql = "select guid from jczl.division where name='{}'".format(j['DIVISIONNAME'])
    cur.execute(sql)
    result = cur.fetchone()
    #           ,                ,    
    if result is not None:
        j['DIVISIONGUID'] = str(result[0])
追加:python DB.fetch all()--データベースのすべての記録リストを取得する
クエリされたデータフォーマットはリストです。
複数の要素のリスト:

単一要素のリスト:

以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。