id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 30625,DatabaseCache backend raises TypeError if get/delete received key as integer.,Hiroki Kiyohara,Hasan Ramezani,"After Django 2.2, DatabaseCache backend will raise TypeError when get/delete method received integer key. {{{ >>> cache = caches[""...""] >>> cache.get(1) Traceback (most recent call last): File ""/usr/lib/python3.7/code.py"", line 90, in runcode exec(code, self.locals) File """", line 1, in File ""/home/hirokiky/.../venv/lib/python3.7/site-packages/django/core/cache/backends/db.py"", line 52, in get return self.get_many([key], version).get(key, default) File ""/home/hirokiky/.../venv/lib/python3.7/site-packages/django/core/cache/backends/db.py"", line 60, in get_many self.validate_key(key) File ""/home/hirokiky/.../venv/lib/python3.7/site-packages/django/core/cache/backends/base.py"", line 245, in validate_key if len(key) > MEMCACHE_MAX_KEY_LENGTH: }}} I know it's not a bug. Because we should pass key as string. > key should be a str, and value can be any picklable Python object. https://docs.djangoproject.com/en/2.2/topics/cache/#basic-usage Before Django 2.2, key argument had been formatted by `make_key` method, and it would convert integer to string. But now Django 2.2 will call `validate_key` before `make_key`, so it will raise TypeError if you pass integer key. I think describing about this change on Django 2.2 release note is better (as small backward incompatible change). https://docs.djangoproject.com/en/2.2/releases/2.2/ Note: This behaviour will happen after this optimization. https://code.djangoproject.com/ticket/29584 ",Bug,closed,Documentation,2.2,Normal,fixed,,pope1ni,Accepted,1,0,0,0,0,0