summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-04-10 11:20:14 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-04-10 11:20:14 -0400
commit55c26710a1f6d6c6f87a9752035bc160f93b38d0 (patch)
tree747759372a948598b007c042de22e1517e046f55
parentffec6ab936a73f5cbe63d9409beb12f1f0307d0b (diff)
downloadsqlalchemy-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.rst11
-rw-r--r--lib/sqlalchemy/sql/schema.py5
-rw-r--r--test/sql/test_metadata.py13
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")