ヒットを返さない sql ステートメントがあります。たとえば、'select * from TAB where 1 = 2'
.
返された行数を確認したいのですが、
cursor.execute(query_sql)
rs = cursor.fetchall()
ここで私はすでに例外を取得しています: "(0, 'No result set')"
この例外を回避するにはどうすればよいですか?結果セットが空かどうかを確認してください。
ヒットを返さない sql ステートメントがあります。たとえば、'select * from TAB where 1 = 2'
.
返された行数を確認したいのですが、
cursor.execute(query_sql)
rs = cursor.fetchall()
ここで私はすでに例外を取得しています: "(0, 'No result set')"
この例外を回避するにはどうすればよいですか?結果セットが空かどうかを確認してください。
cursor.rowcount
通常は 0 に設定されます。
ただし、結果セットを返さないステートメント( 、またはINSERT
なしなど) を実行している場合は、 ;を呼び出す必要はありません。そのようなステートメントの結果セットはありません。ステートメントを実行するには、呼び出しで十分です。RETURNING
SELECT ... INTO
.fetchall()
.execute()
-1
データベース アダプタは、影響を受ける正確な数を判断できない場合に、行数を に設定することもできることに注意してください。PEP 249Cursor.rowcount
仕様を参照してください。
この属性は、カーソルに対して何も実行されてい
-1
ない場合、.execute*()
または最後の操作の行数がインターフェイスによって決定できない場合に使用されます。
sqlite3
ライブラリはこれを行う傾向があります。このようなすべての場合で、影響を受ける行数を前もって知る必要がある場合は、COUNT()
最初に同じトランザクションで選択を実行します。
どんな解決策を試しても、rowcount が常に -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")
結果セットが空の場合、MySQLdb は例外を発生させません。さらに、cursor.execute() 関数は、フェッチされた結果セットの行数である long 値を返します。したがって、空の結果を確認したい場合は、コードを次のように書き直すことができます。
rows_count = cursor.execute(query_sql)
if rows_count > 0:
rs = cursor.fetchall()
else:
// handle empty result set
参考までに、 on 、およびステートメントcursor.rowcount
のみを返します。CREATE
UPDATE
DELETE
| rowcount
| This read-only attribute specifies the number of rows the last DML statement
| (INSERT, UPDATE, DELETE) affected. This is set to -1 for SELECT statements.