Python日常笔记(42)-Django数据库交互
回复“1024”获取持续更新Python系列资料
Django目录介绍
init.py:是一个python的包
settings.py:项目的配置文件
urls.py:路由配置文件
wsgi.py:web服务器和Django交互入口(支持WSGI协议)
manage.py:项目的管理文件
创建应用程序
cmd进入djangoday00目录输入命令:python manage.py startapp testapp(项目名称),就创建好了应用程序。
init.py:python模块
migrations:储存模型类迁移文件
admin.py:后台管理文件
models.py:和数据库交互模块
tests.py:测试代码文件
views.py:接受请求,处理,与M和T进行交互,返回应答,定义处理视图函数。
应用注册
修改settings.py 中的INSTALLED_APPS配置项,加上刚刚创建的应用程序
然后启动程序,cmd进入D:\pyweb\python-web\djangoday00>输入命令python manage.py runserver 9000(任意写端口号)
在models.py定义模型类(BookInfo)
定义模型类,需要继承models.Model类
from django.db import models
# 创建一个BookInfo类
classBookInfo(models.Model):
# 图书名称:定义一个字段为btitle,类型为字符串,长度为20
btitle = models.CharField(max_length=20)
# 出版时间:定义一个字段为日期类型
bpub_date = models.DateField()
根据模型类生成数据表
1.生成迁移文件
cmd进入D:\pyweb\python-web\djangoday00>输入命令python manage.py makemigrations
2.执行迁移生成表
命令:python manage.py migrate
默认生成的数据库是sqlite3小型数据库,查看默认数据库在settings文件中的
DATABASES ={
'default':{
'ENGINE':'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR,'db.sqlite3'),
}
}
新增
cmd进入D:\pyweb\python-web\djangoday00>python manage.py shell
添加数据
from datetime import date
from testapp.models importBookInfo
book =BookInfo()
book.btitle ="天龙八部"
book.bpub_date = date(1990,1,1)
book.save()# 保存数据
查询数据
book2 =BookInfo.objects.get(id=1)
book2.btitle
book2.bpub_date
book2.id
显示数据
修改和删除
修改时也需要save()方法
book2.bpu_date = date(1990,10,2)
book2.bpu_date
# 删除
book2.delete()
创建外键表
创建HeroInfo类
classHeroInfo(models.Model):
# 英雄人物
hname = models.CharField(max_length=20)
# 性别
hsex = models.BooleanField(default=False)
# 备注
hcontent = models.CharField(max_length=128)
# 外键(BookInfo类名)建立HeroInfo和BookInfo外键关系,
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE)
注意:django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常
然后退出python manage.py shell命令:exit()
再次生成迁移文件和表python manage.py makemigrations,python manage.py migrate
添加数据以及查询数据
# 添加书籍数据
from testapp.models import*
from datetime import date
b =BookInfo()
b.btile ="天龙八部"
b.bpub_date = date(1990,1,1)
b.save()
## 添加人物类数据
h =HeroInfo()
h.hname ="乔峰"
h.hsex =False
h.hcontent ="降龙十八掌"
h.hbook = b
b.save()
查询数据
1.查询所有图书数据
BookInfo.objects.all()
2.查询所有人物数据
HeroInfo.objects.all()
3.查询图书下的所有人物
b1.heroinfo_set.all()
4.查询单条数据
h1 =HeroInfo.objects.get(id=1)
完