7天学习计划之Python网络编程_Django-[第六天]

Python网络编程_Django

自律所以能一切



前言

Django是一个开源代码的Web应用框架,采用了MTV模式,即模型(Model)、模板(Template)、和试图(Views)。模型:负责数据存取层,处理与数据相关的事物;模板:处理与表现相关的决定;视图:存取模型及调取恰当模板的相关逻辑。其简便、快捷的开发数据库驱动的网站,有许多强大的第三方库。以下过程和程序采用python3.7,Django3。


六、模型与数据库

Django对各种数据库提供了统一的API,这些API统称为ORM框架。

1.模型定义与数据库迁移

1.1模型定

ORM框架技术是一种程序技术,用于实现面向对象编程语言中不同类型的数据之间的转换。实际上是通过操作虚拟对象数据库实现对目标数据库的操作。
主要步骤如下:
(1)在settings.py中配置属性
(2)构建虚拟对象数据库,在APP的models.py文件中以类的形式定义模型
(3)通过模型在目标数据库中创建相应的数据表
(4)实现读写操作
在项目的models.py定义模型程序如下(不可以直接在数据库中建表,这样会导致模型和和数据库无法建立有效的连系):

class PersonInfo(models.Model):
	id = models.AutoField(primary_key=True)
	name = models.CharField(max_length==20)
	age = models.ItegerField()
	hireData = models.DateField()
	def _str_(self):
		return self.name
class Meta:
	verbose_name = '人员信息'

PersonInfo模型定义了4个不同类型的字段,分别代表自增主键,字符类型,整型和日期类型。Django划分了多种类型。定义模型时一般会重写函数 str,其可以查询外键,但只能返回字符串类型,如果字段是整型或者日期类型,需要使用str()转化。

1.2数据迁移

数据迁移是将项目定义的模型生成数据表,首先在Terminal窗口输入:

python manage.py makemigrations

在migrations文件夹下就会出现0001_initial.py,再接着输入

python manage.py migrate

这样就会在数据库看到表了,但是当新增表时,需要怎么办呢?
就是需要再models.py定义新模型,再次操作Terminal窗口输入即可。

2.数据表关系

一个模型对应数据库的一张数据表,但是每张数据表之间是可以存在外键关联的,包括一对一,一对多,多对多。
一对一:第一张表的某一行数据只与第二张表的某一行数据相关,同时第二张表的某一行数据只与第一张表的某一行数据相关。通过OneToOneField。

一对多:存在两个或两个以上的表中,第一张表的某一行数据只与第二张表的一到多行数据相关,同时第二张表的每一行数据只与第一张表的某一行数据相关。通过ForeignKey。

多对多:存在两个或两个以上的表中,第一张表的某一行数据只与第二张表的一到多行数据相关,同时第二张表的某一行数据也可以与第一张表的一到多行数据相关。通过ManyToManyKey。

3.数据表操作

3.1数据新增

例如对已经建好的模型Vocation新增数据,首先实例化,再插入:

from goods.models import *
v = Vocation()
v.job = '工程师'
v.name_id = 3
v.save

还可以用create

#法1
v=Vocation.objects.create(job = '工程师',name_id = 3)

#法2
d = dict(job = '工程师',job = '工程师')
v=Vocation.objects.create(**d)

如股将方法2中create换为get_or_create,则可以避免重复插入。

3.2数据修改

首先获取,再修改:

from goods.models import *
v = Vocation.object.get(id=1)
v.job = '工程师'
v.save

还有:


v=Vocation.objects.filter(job = '工程师').update(job = '测试员')
3.3数据删除

三种方式;

from goods.models import *
#删全部
v = Vocation.object.all().delete()
#删id=1
v = Vocation.object.get(id=1).delete()
#删多条
v = Vocation.object.get(job = '工程师').delete()
3.4数据查询

查询方式多种:

from goods.models import *
#全表查询
v = Vocation.object.all()
#某字段
v = Vocation.object.values('job')
#数据以列表返回
v = Vocation.object.values—_list('job')

#get查询
v = Vocation.object.get(id=1)

#filter查询
v = Vocation.object.filter(id=1)

#在filter查询中,、|、~分明表示与或非,distinct为去重方式查询-s是降序,


总结

查询丰富

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值