]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- reflection process always resets the primary key constraint
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Dec 2011 20:57:08 +0000 (15:57 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Dec 2011 20:57:08 +0000 (15:57 -0500)
first, fixes extend_existing

lib/sqlalchemy/schema.py
test/engine/test_reflection.py

index b5b057625bc42b7ff6a458b4debafa9ee22f8466..496d8e652fe3e6067a87f25c988e79df67048227 100644 (file)
@@ -357,6 +357,9 @@ class Table(SchemaItem, expression.TableClause):
         self._init_items(*args)
 
     def _autoload(self, metadata, autoload_with, include_columns):
+        if self.primary_key.columns:
+            PrimaryKeyConstraint()._set_parent_with_dispatch(self)
+
         if autoload_with:
             autoload_with.run_callable(
                 autoload_with.dialect.reflecttable,
index 4e80e71e4fc54b4222e8a2698f3d5eeee8f373f9..7cccb930b6252467cb1bec70db57ac6cbb810609 100644 (file)
@@ -123,6 +123,7 @@ class ReflectionTest(fixtures.TestBase, ComparesTables):
         meta = self.metadata
 
         t1 = Table('t', meta,
+            Column('id', Integer, primary_key=True),
             Column('x', Integer),
             Column('y', Integer),
             Column('z', Integer, server_default="5"),
@@ -130,18 +131,20 @@ class ReflectionTest(fixtures.TestBase, ComparesTables):
         meta.create_all()
 
         m2 = MetaData()
-        old_z = Column('z', String)
+        old_z = Column('z', String, primary_key=True)
         old_y = Column('y', String)
         old_q = Column('q', Integer)
         t2 = Table('t', m2, old_z, old_q)
+        eq_(t2.primary_key.columns, (t2.c.z, ))
         t2 = Table('t', m2, old_y,
                         extend_existing=True, 
                         autoload=True, 
                         autoload_with=testing.db)
         eq_(
             set(t2.columns.keys()), 
-            set(['x', 'y', 'z', 'q'])
+            set(['x', 'y', 'z', 'q', 'id'])
         )
+        eq_(t2.primary_key.columns, (t2.c.id, ))
         assert t2.c.z is not old_z
         assert t2.c.y is old_y
         assert t2.c.z.type._type_affinity is Integer