.. changelog::
: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
'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']
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")