"Chris Angelico" wrote in message news:CAPTjJmoAmVNTCKq7QYaDRNQ67Gcg9TxSXYXCrY==s9djjna...@mail.gmail.com...

On Sat, Jan 30, 2016 at 7:22 PM, Frank Millman <fr...@chagford.com> 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


Not so crazy :-) If Ian doesn’t come up with a better idea I will run with it.

Here is a slight variation - just variable name changes really, but I think it is slightly easier to read -

found = False
async for row in cur:
   if found:
       raise TooManyRows
   found = True
if found:
   process row
else:
   no rows found

Frank


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to