From: Robert Leftwich Date: Wed, 25 Jan 2006 01:07:26 +0000 (+0000) Subject: Added column accessor to RowProxy, tests and note in documentation for same. X-Git-Tag: rel_0_1_0~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d986449ee452dab007c3631babd5fa9ab4c1ed04;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Added column accessor to RowProxy, tests and note in documentation for same. --- diff --git a/doc/build/content/sqlconstruction.myt b/doc/build/content/sqlconstruction.myt index fd010be979..1b2df02fe4 100644 --- a/doc/build/content/sqlconstruction.myt +++ b/doc/build/content/sqlconstruction.myt @@ -89,7 +89,10 @@ SELECT users.user_id, users.user_name, users.password FROM users # or column object password = row[users.c.password] - # rowproxy object also supports fetchall() + # or column accessor + password = row.password + + # ResultProxy object also supports fetchall() rows = c.fetchall() # or get the underlying DBAPI cursor object diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index 2d038478e3..72c8c8a94d 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -692,5 +692,9 @@ class RowProxy: return repr(tuple([self.parent._get_col(self.row, key) for key in range(0, len(self.row))])) def __getitem__(self, key): return self.parent._get_col(self.row, key) - + def __getattr__(self, name): + try: + return self.parent._get_col(self.row, name) + except: + raise AttributeError diff --git a/test/query.py b/test/query.py index 942362caa4..e603b002b2 100644 --- a/test/query.py +++ b/test/query.py @@ -7,6 +7,7 @@ import sqlalchemy.databases.sqlite as sqllite db = testbase.db from sqlalchemy import * +from sqlalchemy.engine import ResultProxy, RowProxy class QueryTest(PersistTest): @@ -100,5 +101,33 @@ class QueryTest(PersistTest): r = self.users.select(offset=5).execute().fetchall() self.assert_(r==[(6, 'ralph'), (7, 'fido')]) + def test_column_accessor(self): + self.users.insert().execute(user_id=1, user_name='john') + self.users.insert().execute(user_id=2, user_name='jack') + r = self.users.select(self.users.c.user_id==2).execute().fetchone() + self.assert_(r.user_id == r['user_id'] == r[self.users.c.user_id] == 2) + self.assert_(r.user_name == r['user_name'] == r[self.users.c.user_name] == 'jack') + + def test_column_accessor_shadow(self): + shadowed = Table('test_shadowed', db, + Column('shadow_id', INT, primary_key = True), + Column('shadow_name', VARCHAR(20)), + Column('parent', VARCHAR(20)), + Column('row', VARCHAR(20)), + redefine = True + ) + shadowed.create() + shadowed.insert().execute(shadow_id=1, shadow_name='The Shadow', parent='The Light', row='Without light there is no shadow') + r = shadowed.select(shadowed.c.shadow_id==1).execute().fetchone() + self.assert_(r.shadow_id == r['shadow_id'] == r[shadowed.c.shadow_id] == 1) + self.assert_(r.shadow_name == r['shadow_name'] == r[shadowed.c.shadow_name] == 'The Shadow') + self.failIf(r.parent == 'The Light') + self.failIf(r.row == 'Without light there is no shadow') + self.assert_(isinstance(r.parent, ResultProxy)) + self.assert_(isinstance(r.row, tuple)) + self.assert_(r['parent'] == r[shadowed.c.parent] == 'The Light') + self.assert_(r['row'] == r[shadowed.c.row] == 'Without light there is no shadow') + + if __name__ == "__main__": testbase.main()