自己怎么建网站卖东西,wordpress关键词工具,软件公司介绍,企业网站优化排名方案ORM基本操作
基本操作包括增删改查操作#xff0c;即(CRUD操作)
CRUD是指在做计算处理时的增加(Create)、读取查询(Read)、更新Update)和删除(Delete)
ORM CRUD 核心- 模型类管理器对象
每个继承自 models.Model 的模型类#xff0c;都会有一个 objects 对象被同样继…ORM基本操作
基本操作包括增删改查操作即(CRUD操作)
CRUD是指在做计算处理时的增加(Create)、读取查询(Read)、更新Update)和删除(Delete)
ORM CRUD 核心- 模型类管理器对象
每个继承自 models.Model 的模型类都会有一个 objects 对象被同样继承下来。这个对象叫管理器对象
数据库的增删改查可以通过模型的管理器实现
class MyMode1 (models .Mode1) :...
MyMode1.objects.create(...) # objects 是管理器对象创建数据
Django ORM 使用一种直观的方式把数据库表中的数据表示成Python 对象
创建数据中每一条记录就是创建一个数据对象
方案1
MyModel.objects.create(属性1值1,属性2值1,...)成功: 返创建好的实体对象失败: 抛出异常方案2 创建MyModel实例对象并调用 save()进行保存
obj MyMode1(属性值,属性值)
obj.属性值
obj.save()启动Django shell进行相应的操作项目代码发生变化时Django shell要重新启动
python3 manage.py shell查询操作
all()方法
用法:MyModel.objects.all()
作用: 查询MyModel实体中所有的数据
等同于 select * from tabel
返回值: QuerySet容器对象,内部存放 MyModel 实例可以在模型类中定义__str__ 方法自定义QuerySet中的输出格式例如 在Book模型类下定义如下
def __str__(self):return %s %s %s%s(self.title, self.price, self.pub, self.market_price)values(列1列2..)
用法:MyModel.obiects.values(...)
作用:查询部分列的数据并返回
等同于 select 列1,列2 from xxx
返回值: OuerySet
返回查询结果容器容器内存字典每个字典代表一条数据
格式为:{列1:值1列2:值2}values list(列1列2...)
用法:MyModel.objects.values list(....)
作用:返回元组形式的查询结果
等同于 select 列1列2 from xxx
返回值: uerySet容器对象,内部存放元组会将查询出来的数据封装到元组中,再封装到查询集合OuerySet中order_by()
用法:MyModelobjects.order_by(-列列)
作用:
与all()方法不同它会用SOL 语句的ORDER BY 子句对查询结果进行根据某个字段选择性的进行排序
说明:
默认是按照升序排序,降序排序则需要在列前增加-表示条件查询filter(条件)
语法:MyModel.obiects.filter(属性1值1属性2值2)
作用: 返回包含此 条件的全部的数据集
返回值
QuerySet容器对象,内部存放 MyModel 实例
说明:
当多个属性在一起时为”与”关系exclude(条件)
语法:MyModel.objects.exclude(条件)
作用: 返回不包含此 条件的全部的数据集get(条件)
语法:MyModel.objects.get(条件)
作用: 返回满足条件的唯一一条数据
说明: 该方法只能返回一条数据
查询结果多余一条数据则抛出ModelMultipleObiectsReturned异常
查询结果如果没有数据则抛出Model.DoesNotExist异常查询谓词定义:做更灵活的条件查询时需要使用查询谓词
说明:每一个查询谓词是一个独立的查询功能
__exact:等值匹配
示例:
Author.objects.filter(id__exact1)
# 等同于select * from author where id 1contains:包含指定值
示例: Author.objects.filter(name__containsw)
# 等同于 select * from author where name like %w%
startswith:以XXX 开始 w%
endswith:以XXX 结束 %w__gt:大于指定值
样例: Author.objects.filer(age__gt50)
# 等同于 select * from author where age 50
__gte:大于等于
__lt:小于
__lte:小于等于__in:查找数据是否在指定范围内
样例:
Author.objects.filter(country__in[中国日本韩国])
# 等同于 select * from author where country in (中国日本韩国)
__range:查找数据是否在指定的区间范围内
样例:
# 查找年龄在某一区间内的所有作者
Author.objects.filter(age__range(35,50))
# 等同于 SELECT... WHERE Author BETWEEN 35 and 50;
更新操作
更新单个数据
修改单个实体的某些字段值的步骤
1.查
通过 get()得到要修改的实体对象
2.改
通过 对象.属性的方式修改数据
3.保存
通过对象save()保存数据批量更新数据
直接调用OuerySet的update(属性值) 实现批量修改
示例
# 将 id大于3的所有图书价格定为0元
books Book.objects.filter(id__gt3)
books.update(price0)
# 将所有书的零售价定为100元
books Book.objects.a11()
books.update(market_price100)删除操作
单个数据删除
步骤
1.查找查询结果对应的一个数据对象
2调用这个数据对象的delete(方法实现删除
try:
auth Author.objects.get(id1)
auth.deTete()
except:
print(删除失败)批量删除
步骤
1查找查询结果集中满足条件的全部QuerySet查询集合对象
2调用查询集合对象的delete()方法实现删除
# 删除全部作者中年龄大于65的全部信息
auths Author.objects.filter(age__gt65)
auths .delete()伪删除
通常不会轻易在业务里把数据真正删掉取而代之的是做伪删除即在表中添加一个布尔型字段(is_active),默认是True;执行删除时将欲删除数据的is_active字段置为False
注意:用伪删除时确保显示数据的地方均加了is_activeTrue的过滤查询