Robert Brewer wrote:
Christopher J. Bottaro wrote:

I have a generator that works like this:

for row in obj.ExecSQLQuery(sql, args):
       # process the row

Now there are some querys that run where I know the result will only be a
single row. Is there anyway to get that single row from the generator
without having to use it in a for loop? I want to do something like this:


row = obj.ExecSQLQuery(sql, args)[0]

But I'm guessing that you can't index into a generator as if it is a list.


row = obj.ExecSQLQuery(sql, args).next()

I don't do much with SQL/databases stuff, but if you really know the result will be a single row, you can take advantage of tuple unpacking and do something like:


row, = obj.ExecSQLQuery(sql, args)

or

[row] = obj.ExecSQLQuery(sql, args)

This has the advantage that you'll get a ValueError if you happen to be wrong (and there are more or fewer values in the generator).

>>> def g(n):
...     for i in range(n):
...         yield i
...
>>> x, = g(1)
>>> x
0
>>> x, = g(2)
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
ValueError: too many values to unpack
>>> x, = g(0)
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
ValueError: need more than 0 values to unpack

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to