ヒットを返さないSQLステートメントがあります。例えば、 'select * from TAB where 1 = 2'
。
返される行数を確認したい
cursor.execute(query_sql)
rs = cursor.fetchall()
ここで私はすでに例外を受け取ります: "(0、 '結果セットなし')"
結果セットが空かどうかを確認するには、どうすればこの例外を防ぐことができますか?
_cursor.rowcount
_は通常0に設定されます。
ただし、neverが結果セット(INSERT
なしのRETURNING
など)を返すステートメントを実行している場合、または_SELECT ... INTO
_)の場合、.fetchall()
;を呼び出す必要はありません。そのようなステートメントの結果セットはありません。ステートメントを実行するには、.execute()
を呼び出すだけで十分です。
データベースアダプタは、影響を受ける正確なカウントを特定できない場合、行カウントを_-1
_に設定することもできます。 PEP 249 _Cursor.rowcount
_仕様 を参照してください:
属性は、カーソルに対して
.execute*()
が実行されていない場合、または最後の操作の行カウントがインターフェイスで決定できない場合、_-1
_です。
_sqlite3
_ library はこれを行う傾向があります。そのような場合、影響を受ける行数を事前に知る必要がある場合は、最初に同じトランザクションでCOUNT()
selectを実行します。
結果セットが空の場合、MySQLdbは例外を発生させません。さらに、cursor.execute()関数は、フェッチされた結果セットの行数であるlong値を返します。したがって、空の結果を確認する場合は、コードを次のように書き直すことができます。
rows_count = cursor.execute(query_sql)
if rows_count > 0:
rs = cursor.fetchall()
else:
// handle empty result set
どのような解決策を試しても、行数が常に-1を返すという問題がありました。
Nullの結果を確認するには、次のものが適切な代替品であることがわかりました。
c.execute("SELECT * FROM users WHERE id=?", (id_num,))
row = c.fetchone()
if row == None:
print("There are no results for this query")
注意:これはPythonのMySQLdbモジュール用です。
SELECT
ステートメントの場合、空のレコードセットの例外はありません。 cursor.fetchall()
の場合は空のリスト(_[]
_)、_cursor.fetchone()
の場合はNone
のみ。
その他の声明については、例えばINSERT
またはUPDATE
は、レコードセットを返しません。カーソルでfetchall()
もfetchone()
も呼び出すことはできません。そうでない場合、例外が発生します。
上記の2種類のカーソルを区別する方法が1つあります。
_def yield_data(cursor):
while True:
if cursor.description is None:
# No recordset for INSERT, UPDATE, CREATE, etc
pass
else:
# Recordset for SELECT, yield data
yield cursor.fetchall()
# Or yield column names with
# yield [col[0] for col in cursor.description]
# Go to the next recordset
if not cursor.nextset():
# End of recordsets
return
_
postgresデータベースに接続している場合、次のように機能します。
result = cursor.execute(query)
if result.returns_rows:
# we got rows!
return [{k:v for k,v in Zip(result.keys(), r)} for r in result.rows]
else:
return None
あなたはこのようにすることができます:
count = 0
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=serverName;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
cursor.execute(SQL query)
for row in cursor:
count = 1
if true condition:
print("True")
else:
print("False")
if count == 0:
print("No Result")
ありがとう:)