Mysql与Django是分开的,两个不相干的东西,于是先要下载Mysql数据库,并且安装成功;另外为了使Django能够正常连接mysq数据库还需要系统安装MySQLdb包,centos下使用yum命令 yum -y install MySQL-python 安装即可。为了检测安装是否成功可以通过python交互界面测试下。
>>> import MySQLdb
如果系统没有报错说明MySQldb支持安装成功。
在Django创建的项目路径下的setting.py文件中设置数据库的相关信息
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': 'blog', # Or path to database file if using sqlite3.
- # The following settings are not used with sqlite3:
- 'USER': 'root',
- 'PASSWORD': '123com',
- 'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
- 'PORT': '3306', # Set to empty string for default.
- }
- }
打开python,定位于该项目中的startapp应用文件夹下,执行以下代码:注意,记得使用python manage.py shell来启动shell。
- >>> from django.db import connection
- >>> cursor=connection.cursor()
如果系统没有报错则django连接mysql数据成功。
常见错误
错误信息 |
解决方法 |
You haven’t set the DATABASE_ENGINE setting yet. |
不要以空字符串配置`` DATABASE_ENGINE`` 的值。 表格 5-1 列出可用的值 |
Environment variable DJANGO_SETTINGS_MODULE is undefined. |
使用`` python manager.py shell`` 命令启动交互解释器,不要以`` python`` 命令直接启动交互解释器。 |
Error loading _____ module: No module named _____. |
未安装合适的数据库适配器 (例如, psycopg 或 MySQLdb )。Django并不自带适配器,所以你得自己下载安装。 |
_____ isn’t an available database backend. |
把DATABASE_ENGINE 配置成前面提到的合法的数据库引擎。也许是拼写错误? |
database _____ does not exist |
设置`` DATABASE_NAME`` 指向存在的数据库,或者先在数据库客户端中执行合适的`` CREATE DATABASE`` 语句创建数据库。 |
role _____ does not exist |
设置`` DATABASE_USER`` 指向存在的用户,或者先在数据库客户端中执创建用户。 |
could not connect to server |
查看DATABASE_HOST和DATABASE_PORT是否已正确配置,并确认数据库服务器是否已正常运行。 |
django-admin.py startproject + “项目名称” 命令用来新建一个项目。这里我们通过django-admin.py startproject web 建立一个名为web的项目。然后我们进入web目录下通过ls命令查看下django-admin.py startproject 命令都创建了些什么文件。
- [root@localhost web]# ls
- manage.py web
通过ls命令查看会发现在web的目录下又创建了个以web命名的目录和一个manage.py文本文件,这里的manage.py文件主要用来。下面我们进入项目文件web的目录查看下都创建了那些文件。
- [root@localhost web]# cd web/
- [root@localhost web]# ls
- __init__.py __init__.pyc settings.py settings.pyc urls.py urls.pyc wsgi.py wsgi.pyc
这里主要介绍2个比较关键的文件settings.py 和urls.py文件。通过名字大家很容易看出来这2个文件的作用。settings.py 文件主要用来配置项目信息的,而url.py文件这用来配置和url访问规则相关的信息,以后大家会经常用到这2个文件,这里暂时不详细介绍了。
下面我们在web目录下创建一个应用。
- [root@localhost web]# pwd
- /usr/local/web
- [root@localhost web]# ls
- blog manage.py web
- [root@localhost web]# django-admin.py startapp blog
- [root@localhost web]# cd blog
- root@localhost blog]# ls
- __init__.py __init__.pyc models.py models.pyc tests.py views.py
通过名字我们很好识别各个文件的作用。这里关键的文件为models.py views.py这2个文件。
Ø 作者尊称(先生,女士),姓名,Email,头像。
Ø 出版商名称,地址,城市,省份,国家,网址。
Ø 书籍名字,出版出版日期,作者。
- [root@localhost blog]# ls
- __init__.py __init__.pyc models.py models.pyc tests.py views.py
- [root@localhost blog]# more models.py
- from django.db import models
- from django.contrib import admin
- class Publisher(models.Model):
- name=models.CharField(max_length=30)
- address=models.CharField(max_length=50)
- city=models.CharField(max_length=60)
- state_province=models.CharField(max_length=30)
- county=models.CharField(max_length=50)
- website=models.URLField()
- class Author(models.Model):
- salutation=models.CharField(max_length=10)
- first_name=models.CharField(max_length=30)
- last_name=models.CharField(max_length=40)
- email=models.EmailField()
- headshot=models.ImageField(upload_to='/tmp')
- class Book(models.Model):
- title=models.CharField(max_length=100)
- authors=models.ManyToManyField(Author)
- publisher=models.ForeignKey(Publisher)
- publication_date=models.DateField()
在测试语法正确语法之前我们先把应用加入到配置文件里。vim settings.py如下图所示。红色部分为我们新加的应用,别忘记后面有个逗号。
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.admin',
- 'blog',
- # Uncomment the next line to enable the admin:
- # 'django.contrib.admin',
- # Uncomment the next line to enable admin documentation:
- # 'django.contrib.admindocs',
- )
通过python ../manage.py validate 命令测试模型文件是否配置正确。笔者在测试的过程中发现如下所示的错误,最后发现是因为模型文件中headshot=models.ImageField(upload_to='/tmp'),需要image模块支持,centos系统中同yum命令安装即可, yum -y install python-imaging。
- python ../manage.py validate
- CommandError: One or more models did not validate:
- blog.author: "headshot": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .
- [root@localhost blog]# yum -y install python-imaging
当我们在模型文件里创建好相对应的数据文件后,可以通过pyhon mangae.py sqlall 应用名称命令来查看其对应的mysql创建命令。如下图所示。
我们可以手动复制到mysql命令行里创建相应的数据表,也可以通过python manage.py syncdb命令直接创建。
测试创建的数据表
- mysql> use blog;
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> show tables;
- +----------------------------+
- | Tables_in_blog |
- +----------------------------+
- | auth_group |
- | auth_group_permissions |
- | auth_permission |
- | auth_user |
- | auth_user_groups |
- | auth_user_user_permissions |
- | blog_author |
- | blog_book |
- | blog_book_authors |
- | blog_publisher |
- | django_admin_log |
- | django_content_type |
- | django_session |
- | django_site |
- +----------------------------+
- 14 rows in set (0.00 sec)
通过查看我们发现,数据库中的表是以应用名字为前缀,模型文件中的类文件名为表名字的,这里的类名是忽略大小写的。下节我们讲会讲解怎么在bjango中对数据库文件进行相关操作。