2012-10-02 84 views
1

我玩过Django,python和MySQL;并且在导入django时安装并使它们工作,通过python命令行导入MySQLdb。python manage.py syncdb无法正常工作

但是当我尝试在项目的根目录执行Python manage.py执行syncdb,我得到了以下错误信息:

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 231, in execute 
    self.validate() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 266, in validate 
    num_errors = get_validation_errors(s, app) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/validation.py", line 103, in get_validation_errors 
    connection.validation.validate_field(e, opts, f) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field 
    db_version = self.connection.get_server_version() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 415, in get_server_version 
    self.cursor().close() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/__init__.py", line 306, in cursor 
    cursor = self.make_debug_cursor(self._cursor()) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 387, in _cursor 
    self.connection = Database.connect(**kwargs) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 81, in Connect 
    return Connection(*args, **kwargs) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/connections.py", line 187, in __init__ 
    super(Connection, self).__init__(*args, **kwargs2) 
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (13)") 

什么是可能出现的问题?似乎连接错误的东西?我在这里是新手,感谢您的帮助:)

我重视我的settings.py文件:

# Django settings for mysite project. 
    DEBUG = True 
    TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': '',      
     'USER': 'localhost',     
     'PASSWORD': '',     
     'HOST': '',      
     'PORT': '',      
    } 
} 

    TIME_ZONE = 'America/Chicago' 

    LANGUAGE_CODE = 'en-us' 

    SITE_ID = 1 

    USE_I18N = True 

    USE_L10N = True 

    USE_TZ = True 

    MEDIA_ROOT = '' 

    MEDIA_URL = '' 

    STATIC_ROOT = '' 

    STATIC_URL = '/static/' 

    STATICFILES_DIRS = (
) 

    STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 


SECRET_KEY = 'wke73b4pm&amp;s-g(ra*to+ykxe*[email protected]=nrnt(v&amp;3kf)fx=co*[email protected]' 

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

ROOT_URLCONF = 'mysite.urls' 

WSGI_APPLICATION = 'mysite.wsgi.application' 

TEMPLATE_DIRS = (
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
) 


LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     } 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    } 
} 

我可以成功登录到MySQL数据库使用命令行:mysql的 本地主机-u

使得主机=“127.0.0.1”后,我得到了一个更新的错误消息:

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 371, in handle 
    return self.handle_noargs(**options) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/commands/syncdb.py", line 60, in handle_noargs 
    tables = connection.introspection.table_names() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/__init__.py", line 896, in table_names 
    return self.get_table_list(cursor) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/introspection.py", line 33, in get_table_list 
    cursor.execute("SHOW TABLES") 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/util.py", line 40, in execute 
    return self.cursor.execute(sql, params) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 114, in execute 
    return self.cursor.execute(query, args) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
django.db.utils.DatabaseError: (1046, 'No database selected') 
+1

它不能连接到数据库。请检查最后一行 – HungryCoder

+0

你试图连接到一个MySQL数据库,当你不是这个mysql服务器的时候,你正在引用“localhost” –

+0

更新这个问题并添加你的'settings.py'文件 –

回答

0

您在数据库中缺少HOST设置。请使用localhost127.0.0.1

显然,当未指定主机时,mysqldb默认使用unix域套接字而不使用常规主机名/端口。

+0

Hi Plaes,HOST的空白表示它是本地主机。我补充说,即使是为了尝试的目的,但仍然无法正常工作。不管怎么说,还是要谢谢你。 – leoooo

+0

@leoooo当错误信息显示:'''无法通过socket'/opt/local/var/run/mysql5/mysqld.sock'(13)“)连接到本地MySQL服务器时, “HOST”值有问题 – plaes

+0

我将HOST的空字符串替换为“127.0.0.1”,并得到了我在原始文章中编辑的上述错误... – leoooo

0

您需要先在MySQL中创建一个模式(让我们将其命名为my_db_schema),然后在NAME下指定它的名称。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'my_db_schema',      
     'USER': 'localhost',     
     'PASSWORD': '',     
     'HOST': '',      
     'PORT': '',      
    } 
} 
0

我正面临完全相同的问题。 settings.py中的DATABASES需要为HOSTNAME和PORT设置值。

在我的情况下,mysql使用主机“localhost:3306”。当我将PORT(在settings.py中)的值设置为3306时,它可以工作。

1

只需添加数据库名和端口号..

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'Database_name',     
     'USER': 'root',      
     'PASSWORD': 'root',     
     'HOST': '',      
     'PORT': '3306',     
    } 
}