ubuntu下Django連接mysql數據庫出錯及解決


今天有時間就又開始了Django的學習,下載了《Django Web開發指南》,按照第二章的例子准備做下blog的小例子。沒想到在開始不久在連接數據庫的時候就開始出現了問題。耗費了我一個多小時的時間才終於將它解決。順便說下Django Web開發指南這本書,大致的掃了一下,發現第一章講python基本知識居然有6近0頁,這是雞肋啊。

按照書上的步驟,先創建一個項目

django-admin startproject mysite

之后運行開發服務器,這是一個Django自帶的用於開發期間的服務器

1 ./manage.py runserver

之后創建blog應用

./manage.py startapp blog

然后修改setting.py文件,在INSTALLED_APPS元組的最后加上'mysite.blog',(結尾的逗號是必須的).

之后在models.py中設計model

1 from django.db import models
2 class BlogPost(models.Model):
3 title = models.CharField(max_length = 150)
4 body = models.TextField()
5 timestamp = models.DateTimeField()

接下來就是設置數據庫了,也就是我出現問題的地方。Django支持mysql,PostgreSQL,Oracle等數據庫,還有簡單的附帶在python中SQLite.我選用mysql來進行數據庫的設置.

首先是修改setting.py文件,其中的數據庫部分

 1 DATABASES = {
2 'default': {
3 'ENGINE': 'django.db.backends.mysql',
4 'NAME': 'mysql',
5 'USER': 'root',
6 'PASSWORD': 'fan',
7 'HOST': 'localhost',
8 'PORT': '',
9 }
10 }

這是最終的配置這個正確的結果,這里的name一定要設定為你的數據庫的名字,如果錯了就會出現一下錯誤信息,我開始寫的是djangodb

    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1049, "Unknown database 'djangodb'")

而一開始我出現的是下面的錯誤,非常的長,而有用的是最后的錯誤提示

root@Fan's PC:/home/fan/djangoProject/mysite# ./manage.py syncdb
Traceback (most recent call last):
File "./manage.py", line 14, in <module>
execute_manager(settings)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 261, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 67, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/lib/pymodules/python2.7/django/core/management/commands/syncdb.py", line 7, in <module>
from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
File "/usr/lib/pymodules/python2.7/django/core/management/sql.py", line 6, in <module>
from django.db import models
File "/usr/lib/pymodules/python2.7/django/db/__init__.py", line 78, in <module>
connection = connections[DEFAULT_DB_ALIAS]
File "/usr/lib/pymodules/python2.7/django/db/utils.py", line 93, in __getitem__
backend = load_backend(db['ENGINE'])
File "/usr/lib/pymodules/python2.7/django/db/utils.py", line 33, in load_backend
return import_module('.base', backend_name)
File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/lib/pymodules/python2.7/django/db/backends/mysql/base.py", line 14, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
root@Fan's PC:/home/fan/djangoProject/mysite# vi settings.py
root@Fan's PC:/home/fan/djangoProject/mysite# ./manage.py syncdb
Traceback (most recent call last):
File "./manage.py", line 14, in <module>
execute_manager(settings)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 261, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 67, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/lib/pymodules/python2.7/django/core/management/commands/syncdb.py", line 7, in <module>
from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
File "/usr/lib/pymodules/python2.7/django/core/management/sql.py", line 6, in <module>
from django.db import models
File "/usr/lib/pymodules/python2.7/django/db/__init__.py", line 78, in <module>
connection = connections[DEFAULT_DB_ALIAS]
File "/usr/lib/pymodules/python2.7/django/db/utils.py", line 93, in __getitem__
backend = load_backend(db['ENGINE'])
File "/usr/lib/pymodules/python2.7/django/db/utils.py", line 33, in load_backend
return import_module('.base', backend_name)
File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/lib/pymodules/python2.7/django/db/backends/mysql/base.py", line 14, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

最后的提示是No module named MYSQLdb,就是說沒有和mysql連接上。我開始嘗試進入mysql,不知是為什么,一直出現類似與

error: 'Access denied for user 'root'@'localhost' (using password: NO)'的錯誤。我猜想可能是密碼的原因,不管了,時間緊迫我就想着重新安裝mysql。

在ubuntu下,首先進行卸載,然后安裝,命令如下

1 卸載
2 sudo apt-get autoremove --purge mysql-server
3 sudo apt-get remove mysql-common //用於徹底刪除
4 安裝
5 sudo apt-get install mysql-server
6 sudo apt-get install mysql-client

在安裝的過程中會彈出一個對話框來設置mysql 的root用戶的密碼。

但是重新安裝好后還是不能成功。查找資料過后發現還需要安裝python-mysql的觸發器,也就是python-mysqldb

apt-get install python-mysqldb

安裝好后,我再進行測試,終於成功了。

root@Fan's PC:/home/fan/djangoProject/mysite# ./manage.py syncdb
Creating tables ...
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
Creating table blog_blogpost

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'root'): ***
E-mail address: ******@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.

總結一下,引發這些問題其實很簡單,就是mysql數據庫和django的配置兩個方面,setting.py文件不能寫錯,另外還需要安裝python-mysqldb,否則會出現錯誤。





  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM