Thread: [SQLObject] Iterating through a record...
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Sam's L. <sam...@gm...> - 2008-02-28 04:57:51
|
So I have a record which I get like so: record = TheRun.byUuidRun(uuid) In fact I don't think it really matters how I get it...I also tried selecting by id number, and it didn't make a difference. I can print the record find by coercing it into a string. But I'd like to be able to iterate through it myself. And I can't. I keep getting: 'TypeError: 'TheRun' object is not iterable' Why is this the case? Thanks |
From: Oleg B. <ph...@ph...> - 2008-02-28 07:32:24
|
On Thu, Feb 28, 2008 at 02:57:50AM -0200, Sam's Lists wrote: > I can print the record find by coercing it into a string. > > But I'd like to be able to iterate through it myself. And I can't. I keep > getting: 'TypeError: 'TheRun' object is not iterable' > > Why is this the case? Why do you expect a record to be iterable? There is a list of column names, but there is no a list of values, you have to get a value for a column by the column's name. I don't see any meaning in the code for value in my_row:... because during the loop you don't know column name and type for the value. You can iterate through the list of columns: for column in row.sqlmeta.columnList: print getattr(row, column.name) but remember there is also a list of joins (sqlmeta.joins) and indices. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Sam's L. <sam...@gm...> - 2008-02-28 20:49:21
|
I expect it to be iterable because most Python objects are iterable. :) It makes using them easy. I guess there are a few things it could return if it was iterable: 1) It could return a a column name. This would be useful if sqlobject also allowed you to use subscript notation to get a value. Essentially this would simulate a dictionary without having to do an asDict. 2) It could return an array or tuple of two or three elements. If two elements, return column name and value. Or if you decide type is important return three elements: column name, type, and value. Thanks for the suggestions of columnList and asDict. Neither of these suggestions appear in the documentation! :) (columnList is mentioned---but in a different context). As I'm not using magic attributes I'll use asDict. Thanks Sam On Thu, Feb 28, 2008 at 5:32 AM, Oleg Broytmann <ph...@ph...> wrote: > On Thu, Feb 28, 2008 at 02:57:50AM -0200, Sam's Lists wrote: > > I can print the record find by coercing it into a string. > > > > But I'd like to be able to iterate through it myself. And I can't. I > keep > > getting: 'TypeError: 'TheRun' object is not iterable' > > > > Why is this the case? > > Why do you expect a record to be iterable? There is a list of column > names, but there is no a list of values, you have to get a value for > a column by the column's name. > I don't see any meaning in the code > > for value in my_row:... > > because during the loop you don't know column name and type for the > value. > You can iterate through the list of columns: > > for column in row.sqlmeta.columnList: > print getattr(row, column.name) > > but remember there is also a list of joins (sqlmeta.joins) and indices. > > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Leandro L. <ll...@gm...> - 2008-02-28 12:54:17
|
Oleg Broytmann, el 28 de febrero a las 10:32 me escribiste: > On Thu, Feb 28, 2008 at 02:57:50AM -0200, Sam's Lists wrote: > > I can print the record find by coercing it into a string. > > > > But I'd like to be able to iterate through it myself. And I can't. I keep > > getting: 'TypeError: 'TheRun' object is not iterable' > > > > Why is this the case? > > Why do you expect a record to be iterable? There is a list of column > names, but there is no a list of values, you have to get a value for > a column by the column's name. Well, there is a sqlmeta asDict() method that returns a dict, so you can do: for v in obj.sqlmeta.asDict(): # ... If that's useful. -- Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/ ---------------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------------- Just because you're paranoid, don't mean they're not after you. |
From: Oleg B. <ph...@ph...> - 2008-02-28 13:04:18
|
On Thu, Feb 28, 2008 at 10:50:13AM -0200, Leandro Lucarella wrote: > Well, there is a sqlmeta asDict() method that returns a dict asDict() returns a dict of plain columns + id, but it lacks "magic attributes" (properties). Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |