Django 模型中的CRUD

一、通过 ORM 向 DB 中增加数据

1、Entry.objects.create(属性=值,属性=值)
Entry:具体要操作的Model类

ex:

  Author.objects.create(name=‘zsf‘,age=85)

2、创建一个 Models 对象,通过对象的 save() 完成增加
author = Author(names=‘laoshe‘,age=65)
author.save()

3、使用字典构建属性,通过 save() 完成增加
dic = {
‘属性1‘:‘值1‘,
‘属性2‘:‘值2‘,
}

obj = Entry(**dic)
obj.save()

二、查询操作

通过 Entry.objects 调用查询接口

1、查询所有对象
语法:all()
用法:Entry.objects.all()
返回:QuerySet

ex:
  Author.objects.all()
  等同于:select * from index_author

返回结果:
<QuerySet [<Author: Author object>, <Author: Author object>, <Author: Author object>]>

2、查询指定列
语法:values(‘列1‘,‘列2‘,...)
用法:Entry.objects.values(‘列1‘,‘列2‘,...)
返回:QuerySet

ex:
  Author.objects.values(‘names‘,‘age‘)
  等同于:select name,age from index_author

注意:
  values()可以用在所有的返回查询结果集的方法的后面

  Author.objects.all().values(‘names‘,‘age‘)

  <QuerySet [{‘age‘: 65, ‘names‘: ‘ZhuZiqing‘}, {‘age‘: 68, ‘names‘: ‘laoshe‘}, {‘age‘: 59, ‘names‘: ‘MoYan‘}]>

3、排序函数

语法:order_by(‘列1‘,‘列2‘)
用法:Entry.objects.order_by(‘-列1‘,‘列2‘)
默认的排序规则是升序
如果需要降序,则在列前添加一个 "-"
ex:
  1、Author.objects.order_by(‘age‘)
  2、Author.objects.all().order_by(‘-age‘);


4、对条件取反
语法:exclude()
用法:Entry.objects.exclude(条件)
ex:
  1、Author.objects.exclude(id=3)
  等同于:select * from author where not (id=3)
  2、Author.objects.exclude(id=3,age=85)
  等同于:select * from author where not (id=3 and age=85)

5、根据条件查询部分行数据(重难点)
方法:filter(参数)
用法:Entry.objects.filter(参数)
1、使用 Entry 中的属性作为查询参数
多个参数的话,使用 , 隔开,映射到sql语句上,是使用 and 来进行关联的
ex:
  1、Author.objects.filter(id=1)
  等同于:select * from author where id=1
  2、Author.objects.filter(id=1,name=‘莫言‘)
  等同于:select * from author where id=1 and name=‘莫言‘
2、通过 Field Lookup(查询表达式)完成复杂条件的构建
查询表达式:每个查询表达式都是一个独立的查询条件,可以用在所有的有查询条件的位置处
  1、__exact
  作用:精确查询,等值判断
  用法:Entry.objects.filter(属性__exact=值)
  ex:
    Author.objects.filter(id__exact=1)
    select * from author where id=1
  2、__contains
  作用:筛选出属性中包含指定关键字的记录(模糊查询)
  ex:
    Author.objects.filter(names__contains=‘ao‘)
    select * from author where names like ‘%ao%‘
  3、__lt
  作用:筛选出属性值小于指定值的记录
  4、__lte
  作用:筛选出属性值小于等于指定值的记录
  5、__gt
  作用:筛选出属性值大于指定值的记录
  6、__gte
  作用:筛选出属性值大于等于指定值的记录
  7、__startswith
  作用:筛选出以指定关键字开始的记录
  8、__endswith
  作用:筛选出以指定关键结尾的记录

6、查询只返回一条数据
语法:get(条件)
用法:Entry.objects.get(查询条件/表达式)
注意:
  该函数只适用于返回一条记录时使用

三、修改数据

1、修改单个数据
  1、通过 get() 得到要修改的实体对象
  2、通过实体对象的属性修改属性值
  3、再通过实体对象的save()保存回数据库
ex:
  au = Author.objects.get(id=1)
  au.names = "老舍"
  au.age = 45
  au.save()

2、批量修改数据
调用查询结果集的 update() 完成批量修改
Entry.objects.all().update(属性=值,属性=值)

ex:
  Author.objects.all().update(age=75)

四、删除数据
调用实体对象/查询结果集的 delete() 即可
1、删除单个对象
obj = Author.objects.get(id=1)
obj.delete()

2、删除多个对象
Author.objects.all().delete()

原文地址:https://www.cnblogs.com/hooo-1102/p/11956044.html

时间: 2024-09-30 17:31:01

Django 模型中的CRUD的相关文章

Django 模型中FileField字段

FileField¶ class FileField([upload_to=None, max_length=100, **options])¶ 一个上传文件的字段. 注意 FileField字段不支持primary_key 和unique参数,如果使用会生成 TypeError错误 有两个可选参数: FileField.upload_to¶ Changed in Django 1.7: 在旧版本Django中,upload_to 属性是必须要有的; 这将会添加一个本地文件系统路径到 MEDIA

django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段

在django项目的开发过程中,在设计模型时一开始将主键设置成了一个自定义的字段,但是在创建搜索索引时却发现必须要存在一个id的字段,并且为主键(不知道是否是项目一开始就这样配置的原因), 但此时表结构已经整体固定下来,并且有外键关联到了这个自定义的的主键,整个后台视图逻辑也已经封装完成,如果主表的主键发生改变,那么外键所在的表就会默认关联到新的主键上,那个后台视图的改动就会非常麻烦,这时就需要使用外键字段中的to_field属性来指定所关联的主表的某个字段,而不会影响到原先的逻辑 demo如下

django模型中的__str__()方法和__unicode__()方法

在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法.因为更安全一些. 作用:没加之前在admin后台看到的是一个对象,加了以后看到的是一个字段的值.如下两个图的区别: 原文地址:https://www.cnblogs.com/pythonchen/p/10116390.html

Django模型中的OneToOneField和ForeignKey有什么区别?

说是ForeignKey是one-to-many的,并举了一个车的例子: 有两个配件表,一个是车轮表,另一个是引擎表.两个表都有一个car字段,表示该配件对应的车. 对于车轮来说,多个对应一个car的情况很正常,所以car字段应该用ForeignKey来表示. 对于引擎来说,一个引擎只可能对应一个car,所以必须用OneToOneField. OneToOneField(someModel) 可以理解为 ForeignKey(SomeModel, unique=True). 两者的反向查询是有差

Django 模型中DateField字段

DateField¶ class DateField([auto_now=False, auto_now_add=False, **options])¶ 这是一个使用Python的datetime.date实例表示的日期. 有几个额外的设置参数: DateField.auto_now¶ 每次保存对象时,自动设置该字段为当前时间.用于"最后一次修改"的时间戳. 注意,它总是使用当前日期; 它不是一个您可以重写的默认值. DateField.auto_now_add¶ 当对象第一次被创建时

09 Django 模型(数据库)

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用. 一.打开model文件,修改其中代码 from django.db import models class Person(models.Model): name = models.CharField(max_length

Django模型修改及数据迁移

Migrations Django中对Model进行修改是件麻烦的事情,syncdb命令仅仅创建数据库里还没有的表,它并不对已存在的数据表进行同步修改,也不处理数据模型的删除. 如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改或者使用South.Django 1.7中已经集成了South的代码,提供了3个新命令: migrate: 用于执行迁移动作,具有syncdb的功能 makemigrations: 基于当前的model创建新的迁移策略文件 sql

Django模型

数据库表的设计 设计系统表 Django提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库操作. Django模型基础知识:每个模型是一个Python类,继承django.db.models.model类.该模型的每个属性表示一个数据库表字段.所有这一切,已经给你一个自动生成的数据库访问的API. 1.打开.../sign/models.py文件,完成表的创建 from django.db import models # Create your models here.

python django模型内部类meta详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段.比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Cu