【Python_Django开发笔记(二)】

前言

上一篇,简单介绍了Django网站的创建与运行。Django显著的特点是应用ORM(Object Relational Mapping)对象关系映射处理数据,建立数据模型类与数据库的映射关系,使业务逻辑通过类对象更好的实现,避免繁琐的SQL语句。
在此,先补充一点细节:
在setting.py中修改变量,设定中文与时区

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

ORM的特点

优点

操作数据库不需要通过SQL语句,专注业务逻辑就行。

缺点

本质是还是对SQL语句的封装,所以必然会牺牲一定的执行效率,但是也许一般程序员使用SQL语句的执行效率牺牲更多?!

实际情况

本质

ORM的映射是 数据模型(Model)映射 数据库表。一一对应,类的属性映射为数据库表字段类的实例对象映射为数据行(记录)

ORM的功能

  1. 生成数据库表——创建、修改、删除;
  2. 操作数据库表的数据行——增、删、改、查;
    可以发现,ORM不能自己创建数据库,需要在现有数据库中操作。

ORM的使用步骤

  1. 建立数据库
  2. 连接数据库
  3. 编写数据模型
  4. 生成数据库表
  5. 使用Django ORM操作数据库表
    (前4步看上一篇)

ORM的用法

创建数据模型

名称属性
groupname
script
from django.db import models #导入模块,必须项
class Group(models.Model): #类继承
	group_name=models.CharField(max_length=32,verbose_name='团体名称')
	group_script = models.CharField(max_length=60, verbose_name='备注')

常见字段(类属性)

字段包括字段与属性参数,常见字段如下:

user = models.CharField(max_length=32, verbose_name='姓名') #字符型

email = models.EmailField(verbose_name='邮箱') #邮箱类型,实际上也是字符类型,但是提供邮箱格式检验

depart = models.TextField(verbose_name="部职别") #文本类型,字符串超过254字符时使用

joinDate = models.DateField(verbose_name='加入时间', auto_now=False, auto_now_add=False) #日期字段 第一个参数自动保存当前时间,即最后修改时间,第二个参数字段设置当前时间,即记录对象创建时间

int = models.IntegerField() #整数类型

joinTime = models.TimeField( auto_now=False, auto_now_add=False)  #时间字段

dateTime = models.DateTimeField(auto_now=False, auto_now_add=False)

fileTest = models.FileField(upload_to = '/myproject/')  #文件上传至指定路径upload_to 中,与setting.py中的MEDIA_ROOT变量有关,文件路径为/MEDIA_ROOT/upload_to/fileTest fileTest的值可以为test.txt

picture = models.ImageField(upload_to = '/myproject/')  #图片文件上传至指定路径upload_to 中

常见的字段属性有:

db_index 
   title = models.CharField(max_length=32, db_index=True) #表示该字段为数据库表的索引

unique
   title = models.CharField(max_length=32, unique=True)  #表示该字段在数据库表中为唯一值

default
   title = models.CharField(max_length=32, default='true')  #表示该字段的默认值

基本数据操作

数据库表的基本操作是增删改查,ORM是通过数据模型的objects属性这个接口完成数据操作。
一般形式如下:
models.数据库表.objects.函数()
常用函数如下,返回值为QuerySet对象集,该对象集对应数据库表的记录集合,但是只有当我们用到该值时,它才会去数据库表中获取数据。

#all()函数
group_list = models.Group.objects.all()

#filter()函数 字段过滤用 字段名+双下划线+条件名词
group_list = models.Group.objects.filter(name='zkz')
#忽略大小写
group_list = models.Group.objects.filter(name__icontains='zkz') 
#id等于1,2,3的数据
group_list = models.Group.objects.filter(id__in=[1, 2, 3]) 
#id不等于1,2,3的数据
group_list = models.Group.objects.exclude(id__in=[1, 2, 3])
#id大于1且小于10的记录
group_list = models.Group.objects.filter(id__gt=1, id__lt=10) 
#id在范围1-10内的数据
group_list = models.Group.objects.filter(id__range=[1,10])

#exclude()函数 返回不符合值
group_list = models.Group.objects.exclude(id__in=[1, 2, 3])

#distinct()函数 去掉重复记录,然后返回记录集
group_list = models.Group.objects.filter(name='zkz').distinct()

#value()函数 返回字典类型序列
objects = models.Group.objects.values('name','id')

增加记录

#第一种
group = models.Group.objects.create(name='zkz', id=1)
#第二种
group = models.Group(name='zkz', id=1)
group.save()

删除记录

过滤一般过滤主键

#过滤后删除
models.Group.objects.filter(name='zkz').delete()

修改记录

#指定条件修改——可多条
models.Group.objects.filter(name='zkz').update(id='2')
#修改单条数据
group = models.Group.objects.get(name='zkz')
group.id = '3'
group.save()

查询记录

#获取全部
group_list = models.Group.objects.all()
#获取单条数据
group = models.Group.objects.get(name='zkz')
#指定条件获取
group_list = models.Group.objects.filter(name='zkz')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值