Opened 18 years ago
Closed 18 years ago
#4827 closed (fixed)
str.upper() failed in _get_installed_models when syncdb
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Core (Other) | Version: | dev |
| Severity: | Keywords: | unicode oracle str | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Problem:
I'm using django svn-5640
#python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 11, in ?
execute_manager(settings)
File "/usr/lib/python2.4/site-packages/django/core/management.py", line 1742, in execute_manager
execute_from_command_line(action_mapping, argv)
File "/usr/lib/python2.4/site-packages/django/core/management.py", line 1639, in execute_from_command_line
action_mapping[action](int(options.verbosity), options.interactive)
File "/usr/lib/python2.4/site-packages/django/core/management.py", line 549, in syncdb
seen_models = _get_installed_models(table_list)
File "/usr/lib/python2.4/site-packages/django/core/management.py", line 71, in _get_installed_models
return set([m for m in all_models if converter(m._meta.db_table) in map(converter, table_list)])
TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode'
Since some backend (eg:oracle xe) use case insensitive table names,
django will run str.upper() to make table names unique.
however str.upper() expect for a str type,
and now django trunk version give a unicode type back,
that would cause a problem.
Solution:
Change str.upper() in _get_installed_models at management.py to string.upper() would avoid this problem.
--- /usr/lib/python2.4/site-packages/django/core/management.py.orig 2007-07-10 16:55:07.000000000 +0800
+++ /usr/lib/python2.4/site-packages/django/core/management.py 2007-07-10 16:37:27.000000000 +0800
@@ -65,7 +65,9 @@
for model in models.get_models(app):
all_models.append(model)
if backend.uses_case_insensitive_names:
- converter = str.upper
+ import string
+ converter = string.upper
else:
converter = lambda x: x
return set([m for m in all_models if converter(m._meta.db_table) in map(converter, table_list)])
Change History (2)
comment:1 by , 18 years ago
| Component: | Uncategorized → Core framework |
|---|---|
| Keywords: | unicode,oracle,str → unicode oracle str |
| Owner: | changed from to |
| Triage Stage: | Unreviewed → Ready for checkin |
comment:2 by , 18 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
(In [5852]) Fixed #4827 -- Fixed a problem when converting Unicode table names to upper-case in Oracle backend. Based on a patch from timchen119@….