From df9e3f2fb9804486e2e95bff2f4d2b52fff776c2 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 4 Dec 2011 15:57:08 -0500 Subject: [PATCH] - reflection process always resets the primary key constraint first, fixes extend_existing --- lib/sqlalchemy/schema.py | 3 +++ test/engine/test_reflection.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) 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 -- 2.47.3