From: Mike Bayer Date: Thu, 26 Jul 2007 17:45:25 +0000 (+0000) Subject: - added array slice support to row[] [ticket:686] X-Git-Tag: rel_0_4_6~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5c0fc43725fcb089614f313cb2937479f66d644;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - added array slice support to row[] [ticket:686] --- diff --git a/CHANGES b/CHANGES index b9bc3a8ef9..981ce14629 100644 --- a/CHANGES +++ b/CHANGES @@ -183,6 +183,7 @@ within expressions - added select().with_prefix('foo') allowing any set of keywords to be placed before the columns clause of the SELECT [ticket:504] + - added array slice support to row[] [ticket:686] - result sets make a better attempt at matching the DBAPI types present in cursor.description to the TypeEngine objects defined by the dialect, which are then used for result-processing. Note this only takes effect diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 01ae958599..4d6cbececd 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1409,7 +1409,11 @@ class RowProxy(object): return self.__parent._has_key(self.__row, key) def __getitem__(self, key): - return self.__parent._get_col(self.__row, key) + if isinstance(key, slice): + indices = key.indices(len(self)) + return tuple([self.__parent._get_col(self.__row, i) for i in range(*indices)]) + else: + return self.__parent._get_col(self.__row, key) def __getattr__(self, name): try: diff --git a/test/sql/query.py b/test/sql/query.py index 11b7beffb2..487db63f90 100644 --- a/test/sql/query.py +++ b/test/sql/query.py @@ -225,6 +225,8 @@ class QueryTest(PersistTest): def test_column_accessor(self): users.insert().execute(user_id=1, user_name='john') users.insert().execute(user_id=2, user_name='jack') + addresses.insert().execute(address_id=1, user_id=2, address='foo@bar.com') + r = users.select(users.c.user_id==2).execute().fetchone() self.assert_(r.user_id == r['user_id'] == r[users.c.user_id] == 2) self.assert_(r.user_name == r['user_name'] == r[users.c.user_name] == 'jack') @@ -233,6 +235,12 @@ class QueryTest(PersistTest): self.assert_(r.user_id == r['user_id'] == r[users.c.user_id] == 2) self.assert_(r.user_name == r['user_name'] == r[users.c.user_name] == 'jack') + # test slices + r = text("select * from query_addresses", bind=testbase.db).execute().fetchone() + self.assert_(r[0:1] == (1,)) + self.assert_(r[1:] == (2, 'foo@bar.com')) + self.assert_(r[:-1] == (1, 2)) + def test_ambiguous_column(self): users.insert().execute(user_id=1, user_name='john') r = users.outerjoin(addresses).select().execute().fetchone()