diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-04-10 11:20:14 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-04-10 11:20:14 -0400 |
commit | 55c26710a1f6d6c6f87a9752035bc160f93b38d0 (patch) | |
tree | 747759372a948598b007c042de22e1517e046f55 | |
parent | ffec6ab936a73f5cbe63d9409beb12f1f0307d0b (diff) | |
download | sqlalchemy-55c26710a1f6d6c6f87a9752035bc160f93b38d0.tar.gz |
- Fixed issue where a :class:`.MetaData` object that used a naming
convention would not properly work with pickle. The attribute was
skipped leading to inconsistencies and failures if the unpickled
:class:`.MetaData` object were used to base additional tables
from.
fixes #3362
-rw-r--r-- | doc/build/changelog/changelog_09.rst | 11 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/schema.py | 5 | ||||
-rw-r--r-- | test/sql/test_metadata.py | 13 |
3 files changed, 28 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_09.rst b/doc/build/changelog/changelog_09.rst index e48585ea7..7960da626 100644 --- a/doc/build/changelog/changelog_09.rst +++ b/doc/build/changelog/changelog_09.rst @@ -15,6 +15,17 @@ :version: 0.9.10 .. change:: + :tags: bug, sql + :tickets: 3362 + :versions: 1.0.0 + + Fixed issue where a :class:`.MetaData` object that used a naming + convention would not properly work with pickle. The attribute was + skipped leading to inconsistencies and failures if the unpickled + :class:`.MetaData` object were used to base additional tables + from. + + .. change:: :tags: bug, postgresql :tickets: 3354 :versions: 1.0.0 diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index e40909850..bbbd28b4d 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -3359,11 +3359,14 @@ class MetaData(SchemaItem): 'schema': self.schema, 'schemas': self._schemas, 'sequences': self._sequences, - 'fk_memos': self._fk_memos} + 'fk_memos': self._fk_memos, + 'naming_convention': self.naming_convention + } def __setstate__(self, state): self.tables = state['tables'] self.schema = state['schema'] + self.naming_convention = state['naming_convention'] self._bind = None self._sequences = state['sequences'] self._schemas = state['schemas'] diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 65e1e60ce..db5e73e52 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -3575,3 +3575,16 @@ class NamingConventionTest(fixtures.TestBase, AssertsCompiledSQL): u1.append_constraint(ck1) eq_(ck1.name, "ck_user_foo") + + def test_pickle_metadata(self): + m = MetaData(naming_convention={"pk": "%(table_name)s_pk"}) + + m2 = pickle.loads(pickle.dumps(m)) + + eq_(m2.naming_convention, {"pk": "%(table_name)s_pk"}) + + t2a = Table('t2', m, Column('id', Integer, primary_key=True)) + t2b = Table('t2', m2, Column('id', Integer, primary_key=True)) + + eq_(t2a.primary_key.name, t2b.primary_key.name) + eq_(t2b.primary_key.name, "t2_pk") |