def invalidate_table_constraints(func):
 def _cache_clear(self, table, *args, **opts):
  db_name = self._get_setting('NAME')
  if (db_name in self._constraint_cache):
   del self._constraint_cache[db_name]
  if (db_name in self._reverse_cache):
   del self._reverse_cache[db_name]
  if (db_name in self._constraint_references):
   del self._constraint_references[db_name]
  return func(self, table, *args, **opts)
 return _cache_clear

def invalidate_table_constraints ( func ) : def _cache_clear ( self , table , * args , ** opts ) : db_name = self . _get_setting ( 'NAME' ) if ( db_name in self . _constraint_cache ) : del self . _constraint_cache [ db_name ] if ( db_name in self . _reverse_cache ) : del self . _reverse_cache [ db_name ] if ( db_name in self . _constraint_references ) : del self . _constraint_references [ db_name ] return func ( self , table , * args , ** opts ) return _cache_clear
for mysql we grab all table constraints simultaneously .