1.数据库配置
打开settings.py配置文件,找到数据库配置DATABASES,例如:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, # 使用哪个数据库引擎 ‘NAME‘: ‘djangodb‘, # 数据库名称 ‘USER‘: ‘django‘, # 用哪个用户连接数据库 ‘PASSWORD‘: ‘django‘, # 用户密码 ‘HOST‘: ‘localhost‘, # 数据库服务器监听地址 ‘PORT‘: ‘3306‘, # 数据库服务器监听端口 } }
2.创建应用程序
python manage.py startapp books
注:系统对app有一个约定: 如果你使用了Django的数据库层(模型),你 必须创建一个django app。 模型必须存放在apps中。
3.模型定义
第一步是用Python代码来描述它们。 打开由startapp命令创建的models.py 并输入下面的内容:
from django.db import models 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) country = models.CharField(max_length=50) website = models.URLField() class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()
首先要注意的事是每个数据模型都是 django.db.models.Model 的子类。 它的父类 Model 包含了所有和数据库
打交道的方法,并提供了一个简洁漂亮的定义语法。每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型例如(CharField)相当于数据库的字段类型 (例如
varchar)。
4.模型安装
第一步是在 Django 项目中激活这些模型。将 app 添加到配置文件的已INSTALLED_APPS列表中即可完成此步骤。INSTALLED_APPS 告诉
Django 项目哪些 app 处于激活状态。例如:
INSTALLED_APPS = ( ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.sites‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, # Uncomment the next line to enable the admin: # ‘django.contrib.admin‘, # Uncomment the next line to enable admin documentation: # ‘django.contrib.admindocs‘, ‘debug_toolbar‘, ‘books‘, )
第二步用下面的命令校验模型的有效性:
python manage.py validate
第三步模型确认没问题了,运行下面的命令来生成 CREATE TABLE 语句:
python manage.py sqlall books
注:sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来。
第四步运行以下命令同步模型到数据库:
python manage.py syncdb
5.基本数据访问
当你使用Django modle API创建对象时Django并未将对象保存至数据库内,除非你调用save()方法:
p1 = Publisher(...) # At this point, p1 is not saved to the database yet! p1.save() # Now it is.
如果需要一步完成对象的创建与存储至数据库,就使用objects.create()方法。
>>> p1 = Publisher.objects.create(name=‘Apress‘, ... address=‘2855 Telegraph Avenue‘, ... city=‘Berkeley‘, state_province=‘CA‘, country=‘U.S.A.‘, ... website=‘http://www.apress.com/‘)
6.添加模块的字符串表现
当我们打印整个publisher列表时,我们没有得到想要的有用的信息:
>>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Publisher object>, <Publisher: Publisher object>]
只需要添加一个方法 __unicode__() 到 Publisher 对象。 __unicode__() 方法告诉Python如何实现对象的unicode表示。
from django.db import models 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) country = models.CharField(max_length=50) website = models.URLField() def __unicode__(self): return self.name class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() def __unicode__(self): return u‘%s %s‘ % (self.first_name, self.last_name) class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() def __unicode__(self): return self.title
为了让我们的修改生效,先退出Python Shell,然后再次运行 python manage.py shell 进入。
>>> from books.models import Publisher >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Apress>, <Publisher: O‘Reilly>]