#7813 closed (fixed)
Problem Pickling Querysets
Reported by: | Owned by: | Malcolm Tredinnick | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Keywords: | queryset pickle select_related | |
Cc: | 7944 | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
I saw a previously closed ticket 7506 for a related (no pun intended) problem. It seems like when we use select_related suddenly the queryset can't be pickled. This used to work back in May sometime. Currently using SVN 7944.
The models is attached.
# This works ld = LeagueDivision.objects.all() cache.set('test2', ld) # This doesn't work ld = LeagueDivision.objects.select_related('league_conference').all() cache.set('test2', ld)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python25\lib\site-packages\django\core\cache\backends
\memcached.py", line 35, in set
self._cache.set(smart_str(key), value, timeout or
self.default_timeout)
File "C:\Projects\pyapps\memcache.py", line 437, in set
return self._set("set", key, val, time, min_compress_len)
File "C:\Projects\pyapps\memcache.py", line 609, in _set
store_info = self._val_to_store_info(val, min_compress_len, key)
File "C:\Projects\pyapps\memcache.py", line 581, in
_val_to_store_info
pickler.dump(val)
File "C:\Python25\lib\copy_reg.py", line 71, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.name
TypeError: can't pickle function objects
The dev environment is Windows, Python 2.5.1 using runserver built in web server with memcache (also on Windows) and Postgres 8.2 on Windows.
- Ed
Attachments (2)
Change History (6)
by , 16 years ago
by , 16 years ago
Attachment: | clear_related_select_fields.diff added |
---|
comment:1 by , 16 years ago
Component: | Uncategorized → Database wrapper |
---|---|
Has patch: | set |
Keywords: | select_related added |
Needs tests: | set |
Owner: | changed from | to
I encountered this bug this past week and forgot to file a ticket. The problem is that when select_related
is used, one of the internal Query
data structures still contains references to Fields
(some of which can't be pickled because of curried functions). This patch blanks out the related_select_fields
structure prior to pickling, which should be OK because it's repopulated every time pre_sql_setup
is called in as_sql
. Malcolm will tell us if I'm wrong :)
comment:2 by , 16 years ago
milestone: | → 1.0 beta |
---|---|
Patch needs improvement: | set |
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Example model