簡體   English   中英

Django和MySQL,無法訪問數據庫連接錯誤:1045

[英]Django and MySQL, cannot gain access to connect with the database ERROR:1045

您好,我正在與幾個人進行一個項目。 我們使用的是django 1.9我的mysql,有人設置了django與mysql連接,然后為我們其他人編寫了有關將python與mysql連接所需下載內容的說明。 我正確安裝了mysql,但是訪問數據庫時遇到問題。 我們所有人都假定可以訪問數據庫,但是我一直在輸入django.db.utils.OperationalError: (1045, "Access denied for user 'django'@'localhost' (using password: YES)")即使我只是鍵入在mysql進入終端時,我得到ERROR 1045 (28000): Access denied for user 'stevenJing'@'localhost' (using password: NO)並鍵入mysql -u root -p我得到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 我不確定我需要做什么來解決此問題,因為我什至無法執行python3 manage.py runserver因為我遇到了一個大錯誤。

    Performing system checks...

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x10434a510>
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 264, in get_new_connection
    conn = Database.connect(**conn_params)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQLdb/connections.py", line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'django'@'localhost' (using password: YES)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
    self.check(display_num_errors=True)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/management/base.py", line 426, in check
    include_deployment_checks=include_deployment_checks,
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/checks/registry.py", line 75, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/checks/model_checks.py", line 28, in check_all_models
    errors.extend(model.check(**kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 1178, in check
    errors.extend(cls._check_fields(**kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 1255, in _check_fields
    errors.extend(field.check(**kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 925, in check
    errors = super(AutoField, self).check(**kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 208, in check
    errors.extend(self._check_backend_specific_checks(**kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 317, in _check_backend_specific_checks
    return connections[db].validation.check_field(self, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/validation.py", line 18, in check_field
    field_type = field.db_type(connection)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 625, in db_type
    return connection.data_types[self.get_internal_type()] % data
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/__init__.py", line 36, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/functional.py", line 33, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 184, in data_types
    if self.features.supports_microsecond_precision:
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/functional.py", line 33, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/features.py", line 53, in supports_microsecond_precision
    return self.connection.mysql_version >= (5, 6, 4) and Database.version_info >= (1, 2, 5)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/functional.py", line 33, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 359, in mysql_version
    with self.temporary_connection():
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 564, in temporary_connection
    cursor = self.cursor()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 231, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 204, in _cursor
    self.ensure_connection()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/base/base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 264, in get_new_connection
    conn = Database.connect(**conn_params)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQLdb/connections.py", line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (1045, "Access denied for user 'django'@'localhost' (using password: YES)")

這是我對Django的settings.py

DATABASES = {
    'default': {
       # 'ENGINE': 'mysql.connector.django',
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lolProject',
        'USER': 'django',
        'PASSWORD': 'django-pass',
        'HOST': '127.0.0.1',
        #'OPTIONS':{'read_default_file': ''},
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

設置數據庫的人是MySQL的新手,我也是,這又是怎么回事,因此,如果有人從git repo中提取或克隆它們,他們就可以訪問該數據庫。

如果人們在拉您的代碼,並且您希望他們訪問您的數據庫,則他們可能不應該使用“ localhost”。 如果在本地主機上運行時也遇到此錯誤,則是權限問題。

要做的第一件事是查看是否可以使用命令行MySQL或另一個MySQL客戶端使用這些憑據登錄。

我經常遇到這類錯誤(不幸的是),這通常是因為我沒有在MySQL中正確添加用戶。 我注意到僅將'%'並不代表localhost,在授予用戶特權時,除了'user'@'%'外,我通常還必須添加'user'@'localhost'。

編輯:為了授予特權,您需要以root用戶身份登錄mysql,通常您會使用以下命令:

% mysql -u root -P mysql

“ -P”表示您將必須提供root / admin密碼,最后一個“ mysql”是要使用的架構。 顯然,您需要管理員訪問權限才能執行此操作。

然后,在最新版本的MySQL中,首先創建用戶:

> create user  'stevenJing'@'localhost' identified by 'password';

這實際上是與'stevenJing'@'%'不同的用戶,因此,如果要同時從本地主機和遠程主機進行連接,則實際上兩者都需要。

然后,您需要向該用戶授予特權:

> grant all privileges on <schema>.* to 'stevenJing'@'localhost';

模式顯然是您的Django模式(上述Django設置中的lolProject)。 另外,當然,要授予該用戶從其他地方登錄的權限:

> grant all privileges on <schema>.* to 'stevenJing'@'%';

MySQL權限

此錯誤是因為django用戶無權訪問lolProject數據庫。 您可以使用GRANT命令糾正該問題。 django用戶需要很多特權,因為它需要在遷移過程中創建和刪除表,因此應該這樣做。

GRANT ALL ON lolproject.* TO 'django'@'localhost';

更新:通常通過以mysql -u root身份打開mysql控制台來執行此操作,其中root是默認安裝的帳戶,通常沒有與之關聯的密碼。

現在,如果每個人的計算機上都裝有mysql服務器,這將很好。 如果每個人都連接到同一個計算機,則應該

GRANT ALL ON lolproject.* TO 'django'@'%';

由於每個回購者都需要訪問權限,因此您應該在settings.py使用IP代替localhost。

Sqlite

您是否考慮過使用sqlite? 它幾乎不需要任何設置,並且從存儲庫中克隆或提取文件的每個人都會獲得當前數據庫的副本(如果已將其添加到存儲庫中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM