Сбой Django SYNCDB при добавлении суперпользователя (Windows 7, mySQL, Django 1.2.4, mySQL 5.5) - PullRequest
2 голосов
/ 25 января 2011

Сбой syncdb при создании суперпользователя

Джанго: версия 1.2.4 Python: 2.6 MySQL Server: 5.5 Windows 7 Дополнительно: MySQL-Python v1.2.3

Какие шаги воспроизведут проблему? 1. установить вышеуказанные программы 2. создать проект 3. запустите syncdb

Примечание: я установил mySQL для поддержки UTF 8. Я также создаю базу данных mysite_db, используя CREATE DTABASE mysite_db CHARACTER SET = UTF8;

Каков ожидаемый результат? Что вы видите вместо этого?

syncdb создает необходимые таблицы следующим образом:


C:\DjangoProjects\mysite>python manage.py syncdb
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superuse
rs defined.
Would you like to create one now? (yes/no):

Я выбираю «ДА» и получаю следующую ошибку:


Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line
438, in execute_manager
    utility.execute()
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line
379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 191,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 220,
 in execute
    output = self.handle(*args, **options)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 351,
 in handle
    return self.handle_noargs(**options)
  File "C:\Python26\lib\site-packages\django\core\management\commands\syncdb.py"
, line 103, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "C:\Python26\lib\site-packages\django\core\management\sql.py", line 182,
in emit_post_sync_signal
    interactive=interactive, db=db)
  File "C:\Python26\lib\site-packages\django\dispatch\dispatcher.py", line 172,
in send
    response = receiver(signal=self, sender=sender, **named)
  File "C:\Python26\lib\site-packages\django\contrib\auth\management\__init__.py
", line 44, in create_superuser
    call_command("createsuperuser", interactive=True)
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line
166, in call_command
    return klass.execute(*args, **defaults)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 220,
 in execute
    output = self.handle(*args, **options)
  File "C:\Python26\lib\site-packages\django\contrib\auth\management\commands\cr
eatesuperuser.py", line 71, in handle
    User.objects.get(username=default_username)
  File "C:\Python26\lib\site-packages\django\db\models\manager.py", line 132, in
 get
    return self.get_query_set().get(*args, **kwargs)
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 342, in g
et
    num = len(clone)
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 80, in __
len__
    self._result_cache = list(self.iterator())
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 271, in i
terator
    for row in compiler.results_iter():
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 67
7, in results_iter
    for rows in self.execute_sql(MULTI):
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 73
2, in execute_sql
    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 15, in e
xecute
    return self.cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86
, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 175, in execute
    if not self._defer_warnings: self._warning_check()
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 89, in _warning_
check
    warn(w[-1], self.Warning, 3)
_mysql_exceptions.Warning: Incorrect string value: '\xED' for column 'username'
at row 1

Какую версию продукта вы используете? На какой операционной системе?

Джанго: версия 1.2.4 Python: 2.6 MySQL Server: 5.5 Windows 7 Дополнительно: MySQL-Python v1.2.3

Пожалуйста, предоставьте любую дополнительную информацию ниже.

У меня также установлены коннекторы базы данных mySQL C ++ и ODBC. Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Похоже, что ваш логин на компьютере разработчика содержит символ юникода, и когда модуль createsuperuser.py ищет объект User с этим именем пользователя, он раздражает, потому что MySQL не ожидает этих символов.Вы можете либо изменить параметры сортировки в таблицах MySQL , чтобы принять UTF-8, либо использовать имя пользователя, которое не содержит символов Юникода (что не очень удобно).

Реальный сбой в трассировке начинается с createsuperuser.py в строке 71 и происходит из строки 59 здесь :

        try:
         default_username = getpass.getuser().replace(' ', '').lower()
     except (ImportError, KeyError):
         # KeyError will be raised by os.getpwuid() (called by getuser())
         # if there is no corresponding entry in the /etc/passwd file
         # (a very restricted chroot environment, for example).
         default_username = ''

     # Determine whether the default username is taken, so we don't display
     # it as an option.
     if default_username:
         try:
             User.objects.get(username=default_username)
         except User.DoesNotExist:
             pass
         else:
             default_username = ''

Он получает ваше имя пользователя через getpass, а затем пытаетсяпосмотрите это в таблице User.

0 голосов
/ 25 января 2011

Похоже, у вас есть символы юникода где-то в вашем файле models.py или в профиле. Конвертируйте файлы в UTF-8 и добавьте комментарий в первой строке:

#coding-utf-8

Кроме того, перед строкой Unicode добавьте u, например:

name = CharField(maxlength=255, default=u"утф-8 строка");
...