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是降序,
总结
查询丰富