add keys() to RowProxy, rename built-in attributes with an underscore

Issue #44 resolved
Mike Bayer repo owner created an issue

since we added getattr to RowProxy, we should proabbly rename built in attributes with an underscore to decrase the chances of collisions. Also add a keys() method.

user-submitted patch:

Index: test/query.py
===================================================================
--- test/query.py       (revision 846)
+++ test/query.py       (working copy)
@@ -108,6 +108,11 @@
         self.assert_(r.user_id == r['user_id']('user_id') == r[self.users.c.user_id](self.users.c.user_id) ==
2)
         self.assert_(r.user_name == r['user_name']('user_name') ==
r[self.users.c.user_name](self.users.c.user_name) == 'jack')

+    def test_column_keys(self):
+        self.users.insert().execute(user_id=1, user_name='foo')
+        r = self.users.select().execute().fetchone()
+        self.assert_(r.keys() == ['user_name']('user_id',))
+
     def test_column_accessor_shadow(self):
         shadowed = Table('test_shadowed', db,
                          Column('shadow_id', INT, primary_key = True),
Index: lib/sqlalchemy/engine.py
===================================================================
--- lib/sqlalchemy/engine.py    (revision 846)
+++ lib/sqlalchemy/engine.py    (working copy)
@@ -631,6 +631,7 @@
         self.rowcount = engine.context.rowcount
         metadata = cursor.description
         self.props = {}
+        self.keys = [        i = 0
         if metadata is not None:
             for item in metadata:
@@ -644,6 +645,7 @@
                     raise "None for metadata " + colname
                 if self.props.setdefault(colname, rec) is not rec:
                     self.props[colname](]
) =
(ResultProxy.AmbiguousColumn(colname), 0)
+                self.keys.append(colname)
                 self.props[i](i) = rec
                 i+=1

@@ -700,6 +702,5 @@
             return self.parent._get_col(self.row, name)
         except:
             raise AttributeError
-
-
-
+    def keys(self):
+        return self.parent.keys

Comments (2)

  1. Log in to comment