From: Mike Bayer Date: Sun, 4 Dec 2011 20:57:08 +0000 (-0500) Subject: - reflection process always resets the primary key constraint X-Git-Tag: rel_0_7_4~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=df9e3f2fb9804486e2e95bff2f4d2b52fff776c2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - reflection process always resets the primary key constraint first, fixes extend_existing --- diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index b5b057625b..496d8e652f 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -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, diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index 4e80e71e4f..7cccb930b6 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -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