.. automethod:: fetchmany
.. automethod:: fetchall
.. automethod:: nextset
+ .. automethod:: set_result
+
+ Move to a specific result set if `execute()` returned multiple result
+ sets. The parameter `result_no` specifies the zero-based index of the
+ desired result set. Negative values are supported and refer to result
+ sets counted from the end.
+
+ .. versionadded:: 3.3
+
.. automethod:: results
The iterator yields the cursor itself upon iteration, but the cursor
else:
return None
+ def set_result(self, result_no: int) -> None:
+ """
+ Move to a specific result set if `execute()` returned multiple result sets.
+
+ Args:
+ result_no (int): Zero based index, supports negative values
+ """
+ total_results = len(self._results)
+ if result_no < 0:
+ result_no = total_results + result_no
+ if 0 <= result_no < total_results:
+ self._select_current_result(result_no)
+ else:
+ raise ValueError("result_no value not in available results range")
+
@property
def statusmessage(self) -> str | None:
"""
assert cur.rowcount == 3
assert cur.nextset() is None
+ cur.set_result(0)
+ assert cur.fetchall() == [("foo",)]
+ assert cur.rowcount == 1
+
+ cur.set_result(-1)
+ assert cur.fetchall() == [(1,), (2,), (3,)]
+ assert cur.rowcount == 3
+
+ with pytest.raises(ValueError):
+ cur.set_result(2)
+
+ with pytest.raises(ValueError):
+ cur.set_result(-3)
+
cur.close()
assert cur.nextset() is None
assert cur.rowcount == 3
assert cur.nextset() is None
+ cur.set_result(0)
+ assert cur.fetchall() == [("foo",)]
+ assert cur.rowcount == 1
+
+ cur.set_result(-1)
+ assert cur.fetchall() == [(1,), (2,), (3,)]
+ assert cur.rowcount == 3
+
+ with pytest.raises(ValueError):
+ cur.set_result(2)
+
+ with pytest.raises(ValueError):
+ cur.set_result(-3)
+
await cur.close()
assert cur.nextset() is None