数据库访问Django和MySQL的问题

我已经启动了Apache和mod_wsgi ,现在正试图将Django引入到MySQL中。

我创build了一个名为“django”和“django”用户的数据库; 我已经授予所有django Django:

 grant ALL on django.* to 'django'@'localhost'; 

Django的settings.py已经configuration好了MySQL的设置:

 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'django': '', # Or path to database file if using sqlite3. 'django': '', # Not used with sqlite3. '<a password>': '', # Not used with sqlite3. '': '', # Set to empty string for localhost. Not used with sqlite3. '': '', # Set to empty string for default. Not used with sqlite3. } } 

但是当我尝试运行syncdb( python manage.py syncdb )时,我得到:

 raceback (most recent call last): File "manage.py", line 14, in <module> execute_manager(settings) File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager utility.execute() File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv self.execute(*args, **options.__dict__) File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 219, in execute self.validate() File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate num_errors = get_validation_errors(s, app) File "/usr/lib/python2.6/site-packages/django/core/management/validation.py", line 102, in get_validation_errors connection.validation.validate_field(e, opts, f) File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field db_version = self.connection.get_server_version() File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 338, in get_server_version self.cursor() File "/usr/lib/python2.6/site-packages/django/db/backends/__init__.py", line 250, in cursor cursor = self.make_debug_cursor(self._cursor()) File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 322, in _cursor self.connection = Database.connect(**kwargs) File "/usr/lib/python2.6/site-packages/MySQLdb/__init__.py", line 81, in Connect return Connection(*args, **kwargs) File "/usr/lib/python2.6/site-packages/MySQLdb/connections.py", line 187, in __init__ super(Connection, self).__init__(*args, **kwargs2) _mysql_exceptions.OperationalError: (1045, "Access denied for user 'ec2-user'@'localhost' (using password: NO)") 

最后一行让我感到困惑。 我不知道为什么它试图连接为ec2-user而不是Django

你知道,我不确定为什么它会默认为ec2-user,(除非碰巧是运行Django的进程的所有者),但是这个configuration文件远没有标准。 我相信你想要:

 default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME':'django', # Or path to database file if using sqlite3. 'USER':'django', # Not used with sqlite3. 'PASSWORD':'<a password>', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } 

它看起来像最初一样,而不是replace“名称”值,您replace了“名称”键(和字典中的所有其他键相同)。