使用Django开发数据库应用的最大一个好处在于,使用Django的models可以方便的操纵数据库。models就相当于一个沟通应用与数据库的桥梁,Django会自动将与models相关的内容转化成SQL语句,更新到数据库中。使用Django,开发人员只需要将全部精力放在编写Python程序上即可。

下面,为film应用创建数据表:
1、打开film目录下面的models.py文件
2、书写film应用使用到的数据类
from django.db import models

# 演员
class Actor(models.Model):
    first_name 
= models.CharField(max_length=30)
    last_name 
= models.CharField(max_length=30)
    birthday 
= models.DateField()

# 发行商
class Publisher(models.Model):
    name 
= models.CharField(max_length=30)

# 影片
class Film(models.Model):
    title 
= models.CharField(max_length=100)
    actors 
= models.ManyToManyField(Actor)
    pub_date 
= models.DateField()
    publisher 
= models.ForeignKey(Publisher)
这里没有提供主键,因为Django会为每个class都自动生成一个名为id的主键。整型,自增。
class下的每一项都应该是一个field对象,Django的完整域列表可参考:http://docs.djangoproject.com/en/dev/ref/models/fields/,Django的models相关信息可参考:http://docs.djangoproject.com/en/dev/topics/db/models/,这里,只是简单的示例models的用法。
3、更新数据库
D:\mycode\mysite>python manage.py syncdb
发现报错
SyntaxError: Non-ASCII character '\xe6' in file D:\mycode\mysite\..\mysite\film\models.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
因为源码models.py中用到了中文(虽然是注释。。。),但没有指明编码。
在models.py中加上:
#coding=utf8
重新执行syncdb命令,发现除了我们的film的表之外,还增加了好多额外的信息:
D:\mycode\mysite>python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table film_actor
Creating table film_publisher
Creating table film_film

You just installed Django
's auth system, which means you don't have any superuse
rs defined.
Would you like to create one now? (yes
/no):

这是因为这是第一次执行syncdb命令,除了film之外,settings.py中的INSTALLED_APPS列表中有许多默认应用,第一次执行数据库同步时会生成它们,输入yes,创建admin应用的账号信息。admin是一个系统自动生成的有用的管理工具。包括了大部分常见的后台管理功能,非常实用。

如果没错的话,数据表就建好了。可以到MySQL下验证:

mysql> use film;
Database changed
mysql
> show tables;
+----------------------------+
| Tables_in_film             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_message               |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_content_type        |
| django_session             |
| django_site                |
| film_actor                 |
| film_film                  |
| film_film_actors           |
| film_publisher             |
+----------------------------+
14 rows in set (0.00 sec)

mysql
>
可以看到,数据库表创建成功!