]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Declarative will complete setup for Columns lacking names, allows
authorJason Kirtland <jek@discorporate.us>
Tue, 18 Mar 2008 00:25:55 +0000 (00:25 +0000)
committerJason Kirtland <jek@discorporate.us>
Tue, 18 Mar 2008 00:25:55 +0000 (00:25 +0000)
  a more DRY syntax.

    class Foo(Base):
        __tablename__ = 'foos'
        id = Column(Integer, primary_key=True)

CHANGES
lib/sqlalchemy/ext/declarative.py
test/ext/declarative.py

diff --git a/CHANGES b/CHANGES
index 8cf8e495773528ebc40b8fbc9c1c7e9064031cf4..8ef5013e34298f664727bf68ea2f1d82e00b5edd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -42,6 +42,13 @@ CHANGES
       @comparable_using(...), front-ends for synonym and
       comparable_property.
 
+    - Declarative will complete setup for Columns lacking names,
+      allows a more DRY syntax.
+
+        class Foo(Base):
+            __tablename__ = 'foos'
+            id = Column(Integer, primary_key=True)
+
 0.4.4
 ------
 - sql
index 43cdad1cc69a3bdcad53b45eb3024aea2ab0d748..333b1eaa40cb2f36ea7bd8740f75375547d5d4ff 100644 (file)
@@ -157,7 +157,7 @@ class DeclarativeMeta(type):
             return type.__init__(cls, classname, bases, dict_)
         
         cls._decl_class_registry[classname] = cls
-        our_stuff = {}
+        our_stuff = util.OrderedDict()
         for k in dict_:
             value = dict_[k]
             if (isinstance(value, tuple) and len(value) == 1 and
@@ -180,9 +180,17 @@ class DeclarativeMeta(type):
                     table_kw = {'autoload': True}
                 else:
                     table_kw = {}
-                cls.__table__ = table = Table(tablename, cls.metadata, *[
-                    c for c in our_stuff.values() if isinstance(c, Column)
-                ], **table_kw)
+                cols = []
+                for key, c in our_stuff.iteritems():
+                    if not isinstance(c, Column):
+                        continue
+                    if c.key is None:
+                        c.key = key
+                    if c.name is None:
+                        c.name = key
+                    cols.append(c)
+                cls.__table__ = table = Table(tablename, cls.metadata,
+                                              *cols, **table_kw)
         else:
             table = cls.__table__
         
index d59f88d0870a6d6045a20754cdf72a39c3033422..99686dbe778a73c1a625d9be544c8a8b676bb6c8 100644 (file)
@@ -28,12 +28,17 @@ class DeclarativeTest(TestBase):
         class Address(Base, Fixture):
             __tablename__ = 'addresses'
             
-            id = Column('id', Integer, primary_key=True)
-            email = Column('email', String(50))
-            user_id = Column('user_id', Integer, ForeignKey('users.id'))
+            id = Column(Integer, primary_key=True)
+            email = Column(String(50), key='_email')
+            user_id = Column('user_id', Integer, ForeignKey('users.id'),
+                             key='_user_id')
             
         Base.metadata.create_all()
-        
+
+        assert Address.__table__.c['id'].name == 'id'
+        assert Address.__table__.c['_email'].name == 'email'
+        assert Address.__table__.c['_user_id'].name == 'user_id'
+
         u1 = User(name='u1', addresses=[
             Address(email='one'),
             Address(email='two'),