]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Added column accessor to RowProxy, tests and note in documentation for same.
authorRobert Leftwich <rtl@pobox.com>
Wed, 25 Jan 2006 01:07:26 +0000 (01:07 +0000)
committerRobert Leftwich <rtl@pobox.com>
Wed, 25 Jan 2006 01:07:26 +0000 (01:07 +0000)
doc/build/content/sqlconstruction.myt
lib/sqlalchemy/engine.py
test/query.py

index fd010be9797ef62265d9ea74e4dbfede5c33bb29..1b2df02fe409bd433c7f5b8a61d24800c096ac35 100644 (file)
@@ -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
index 2d038478e3a2860dc2fb67f22204d5349933b8c0..72c8c8a94d45512e3f5e2acbe028bba3b3dccbf5 100644 (file)
@@ -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
 
index 942362caa47b9b1248f53874b254cd81e56aa1c4..e603b002b2791bc12815ca15eb738f7c722a76a7 100644 (file)
@@ -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()