继续上一篇的内容,这篇快速介绍Django的数据库模型。
Django支持4种数据库,PostgreSQL,SQLite3,MySQL,Oracle。这里我们忽略数据库的配置,直接使用默认已经配置完成的SQLite3数据库,重点关注Python代码的实现。Django已经将数据库进行了完善的封装,通过同样的代码,就可以操作多种数据库,会自动生成对应的SQL等语句操作数据库。
定义数据库模型
在app/modules.py中输入以下代码,模型即定义完成。通常一个应用对应了一个数据库,而modules中的每个class对应数据库的一个表,每个成员变量对应了一个字段。这几个类都是继承自models.Model父类的,在父类中已经实现了各种数据库的操作。其中有一些特例,在Book中的authors是一个多对多的关系类型,表示每本书(Book)可以对应多个作者(Author),反过来,每个作者也可以对应多本书(在SQL中,这种对应关系通过一张表实现);Book中的publisher对应了一个Publisher外键。
添加应用
在settings中INSTALLED_APPS添加一行,将创建的应用app添加进去(使用数据库模型时需要安装应用,否则可以不用)
同步数据库
在项目文件夹下运行manage.py validate,可以验证模型的有效性
运行manage.py sqlall app,可以看到生成的SQL语句。如果发生图中错误,提示
CommandError: App ‘app’ has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.
这句话的意思是应用’app’被改动了,只能使用sqlmigrate和sqlflush命令,而不能新建数据表。
解决方法是,删除app对应文件夹下的migrations子文件夹即可(因为我们的模型之前并没有创建,所以也不存在模型被修改的问题)。
正常执行sqlall语句结果如下:
生成的是SQL语句,只是用来预览的,但还没有被实际执行。通过执行manage.py syncdb指令即可创建数据库。由于在INSTALLED_APPS中还有默认生成的后台管理App,所以会提示是否创建管理员账户,如图所示。
输入yes,然后按提示输入管理员用户名和密码即可创建管理员账户。
需要注意的是,syncdb命令根据INSTALLED_APPS创建之前没有创建过的表,但不会将模型的修改和删除同步到数据库。
在shell中操作模型
执行manage.py shell可以进入shell操作模型。输入Python代码新建对象,即可插入模型数据库,代码如下。
from app.models import Publisher
p1 = Publisher(name=‘Apress’, address=‘2855 Telegraph Avenue’, city=‘Berkeley’, state_province=‘CA’, country=‘U.S.A.’, website=‘http://www.apress.com/’)
p1.save()
以下代码可以列出数据表中所有的对象
Publisher.objects.all()
输入的是object,显示形式如下。不能很直观的看到具体的数据。
[, ]
为了显示效果更好,可以给modules.py中的每个类添加__unicode__()方法。写法如下:
为了使代码更改生效,需要重新进入shell(按Ctrl+Z然后回车退出shell,重新执行manage.py shell进入shell)。执行from app.models import Publisher语句,并再次调用Publisher.objects.all(),显示效果如下。
管理页面的查看
用manage.py runserver 0.0.0.0:8000命令启动服务器,浏览器中输入
即可进入管理页面
输入之前设定的管理员账号和密码,即可登录。页面中可以显示并管理用户组和用户。
注册数据库模型
修改app/admin.py,向管理页面注册数据库模型,代码如下:
刷新后台页面,即可用图形化界面管理数据库模型了,非常方便。
用网页输出模型中的数据
在app/views.py中,添加函数如下。该函数用于从数据模型Publisher中搜索名字中包含name的项,并显示
设置路由如下:
输入以下网址可以显示搜索出的一条结果
输入以下网址,没有结果
第二版的Django项目也完成了,提供源码下载。
可在github下载源码:https://github.com/jzj1993/Django-Quick-Start/