خطأ بيثون Manage.py syncdb
سؤال
أحاول تشغيل مشروع Django الأول الخاص بي على نظام Windows، ولكنني أتلقى رسالة خطأ نصها:
File "c:\users\[username]\appdata\local\temp\easy_install-pazcre\MySQL_python-1.2.3-py2.7- win32.egg.tmp\MySQLdb\connections.py", line 187, in __init__ mysql_exceptions.OperationalError: (1045, "Access denied for user 'django_user'@'localhost' (using password: YES)")
لقد قمت بإنشاء قاعدة البيانات الخاصة بي من سطر الأوامر على النحو التالي:
-- create the database
CREATE DATABASE GlobalXdb CHARACTER SET utf8;
-- create user
CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'thepassword';
-- give user permissions to db
GRANT ALL ON django.* TO 'django_user'@'localhost'
لي settings.py
يحتوي الملف على:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'GlobalXdb', # Or path to database file if using sqlite3.
'USER': 'django_user', # Not used with sqlite3.
'PASSWORD': 'thepassword', # 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.
}
}
هل يمكن لأي شخص إلقاء بعض الضوء على ما قمت به بشكل غير صحيح؟
المحلول
قاعدة بياناتك تسمى globalxdb وحتى الآن في هذا الخط ... giveacodicetagpre.
تمنح أذونات django_user في قاعدة البيانات المسماة django .
تعطي أذونات إلى قاعدة البيانات الصحيحة globalxdb يجب أن تحل مشكلتك.
نصائح أخرى
تقول رسالة الخطأ Access denied for user 'django_user'@'localhost'
لذلك أعتقد أن المستخدم "Django_user" غير موجود أو أنك كتبت كلمة المرور بشكل خاطئ.
هناك اقتراح آخر أقل احتمالاً وهو التحقق من الحقوق الممنوحة لـ "Django_user".من المحتمل أن هذا المستخدم ليس لديه الإذن بإنشاء الجداول.
يتم حل هذه المشكلة عن طريق تحديد ملفي تعريف لقاعدة البيانات في ملفك settings.py.
تقصير - يستخدم بواسطة Django في وقت التشغيل مع أذونات محدودة لهذا الأمن الإضافي.
مزامنة - يستخدم بواسطة syncdb، كمستخدم جذر, ، مع امتيازات إنشاء إضافية.
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
'NAME':'database_name',
'USER':'runtime',
'PASSWORD':'runtime_password',
'HOST':'',
'PORT':'',
},
'sync': {
'ENGINE':'django.db.backends.mysql',
'NAME':'database_name',
'USER':'root',
'PASSWORD':'',
'HOST':'',
'PORT':'',
},
}
سيكون عليك أيضًا منح أذونات محدودة للوصول إلى وقت التشغيل الافتراضي في MySQL:
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'runtime'@'localhost' IDENTIFIED BY 'runtime_password';
وأخيرا عند تشغيل com.syncdb تحديد الخاص بك مزامنة الوصول إلى الملف الشخصي:
python manage.py syncdb --database=sync
من المفترض أن يمنحك ذلك الأمان الذي تريده في وقت التشغيل والوصول الذي تريده إلى سطر الأوامر.