On Sat, Jan 30, 2016 at 7:22 PM, Frank Millman <[email protected]> wrote:
> We had a recent discussion about the best way to do this, and ChrisA
> suggested the following, which I liked -
>
> cur.execute('SELECT ...)
> try:
> row = next(cur)
> except StopIteration:
> # row does not exist
> else:
> try:
> next_row = next(cur)
> except StopIteration:
> # row does exist
> else:
> # raise exception
>
> Now that I have gone async, I want to do the same with an asynchronous
> iterator.
Here's a crazy option. (Assuming that a row can't be None. If not, use
a unique sentinel object.)
cur.execute(whatever)
have_row = None
async for row in cur:
if have_row is not None:
raise TooManyRows
have_row = row
if have_row is None:
raise NoRowFound
It's kinda abusing the loop construct, but it'd work. Alternatively,
you could call the dunder method directly, but that feels dirty.
Dunders are for defining, not calling.
ChrisA
--
https://mail.python.org/mailman/listinfo/python-list