手把手带你实战Django中ORM数据库的操作(增删改查)

前言

        不了解ORM的同学可以先看一下这篇文章:Django中ORM的学习,可以帮助你更好的理解ORM,再来学习下面的内容。本篇文章会以“图书”为例,带你学习ORM中的增删改查操作。

        我们需要准备一个简单的‘图书’数据库,然后再进行咱们的增删改查。       

        1.首先在modles.py中建立Book数据库,代码如下:

class Book(models.Model):

    title = models.CharField('书名', max_length=50, default='',unique=True)
    public = models.CharField('出版社',max_length=100,default='')
    price = models.DecimalField('价格',max_digits=7, decimal_places=2)
    info = models.CharField('描述',max_length=100, default='')
    market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)

    class Meta:
        db_table = 'book' # 这里是将表名改为了book
    
# 格式化输出
    def __str__(self):

        return '%s_%s_%s_%s'%(self.title, self.public, self.price, self.market_price)

        2.然后在views.py中定义方法,代码如下:

def all_book(request):

    #all_book = Book.objects.all()
    all_book = Book.objects.filter(is_active=True)

    return render(request, 'bookstore/all_book.html', locals())

        3.再urls.py中配置一下path路径,代码如下:

urlpatterns = [

    path('all_book', views.all_book)

]

我们是在Python-Shell上实现ORM的增删改查,所以我们需要先启动Shell,并把模型导入到里面执行以下命令,如图:

ORM—创建数据

创建数据主要通过模型类.objects.create()保存,例子如下:

 自己可以多创建一些数据,后面使用,这里看一下我创建好的数据:

ORM—查询操作

        数据库的查询需要使用管理器对象进行,通过MyModel.objects管理器方法调用查询方法,下面我会带着大家在shell里将每个方法实现一下。

1.all()方法

用法:MyModel.objects.all()

作用:查询MyModel实体中所有的数据,等同于MySQL里的 select * from table

返回值:QuerySet容器对象

例:查询所有图书的值,如下图:

 2.values('列1','列2')方法

用法:MyModel.objects.values(...)

作用:查询部分列的数据并返回,等同于select 列1,列2 from xxx

返回值:QuerySet,返回查询结果容器,容器内存的是字典,每个字典代表一条数据,格式为:{'1‘:值1,‘列2’:值2}

例:查询所有图书的书名、价格、零售价的值,如下图:

 3.values_list('列1','列2')方法

用法:MyModel.objects.values_list(...)

作用:返回元组形式的查询结果,等同于select 列1,列2 from xxx

返回值:QuerySet容器,内存存放’元组‘,会将查询出来的数据封装到元组中,再封装到查询集合QuerySet中

例:查询图书的书名和出版社,如下图:

 4.order_by()方法

用法:MyModel.objects.order_by('-列','列')

作用:与all()方法不同,它会用SQL语句的ORDER BY子句对查询结果进行跟据某个字段选择性排序

说明:默认是按照升序排序,降序排序则需要在列前增加'-'b表示

例:将所有图书按照价格降序进行排序,如下图:

5.条件查询filter(条件)方法

 语法:MyModel.objects.filter(属性1=值1,属性2=值2)

作用:返回包含此条件的全部数据集

返回值:QuerySet容器对象

例:查询出版社是清华出版社的所有图书,如下图:

 6.exclude(条件)方法

语法:MyModel.objects.exclude(条件)

作用:返回不包含此条件的全部数据集

例:查询除清华大学出版社外的所有图书

 7.get(条件)方法

语法:MyModel.objects.get(条件)

作用:返回满足条件的唯一一条数据

说明:该方法只能返回一条数据,查询结果多余一条数据则抛出异常

例:查询id=2的图书

 8.filter()查询谓词

为了更灵活的条件查询就会用到查询谓词,每一个查询谓词是一个独立的查询功能,

__exact:等值查询,例子:Book.objects.filter(id__exact=1)

__contains:包含指定值,例子:Book.objects.filter(public__contains='清华') #查询带有清华的出版

__startwith:以xxx开始,例子:Book.objects.filter(title__startwith='北大')

__endwith:以xxx结束,例子:Book.objects.filter(title__endwith='清华')

__gt:大于指定值,例子:Book.objects.filter(price__gt=25) # 查询价格大于25的图书

__gte:大于等于某个值

__lt:小于

__lte:小于等于

__in:查找数据是否在指定范围内,例子:Book.objects.filter(title__in=['Linxu','Python'])

__range:查找数据是否在指定的区间范围内,例子:Book.objects.filter(price__range=(20,50))

ORM—更新操作

方法一(适用于修改单条数据):

需要先查出该数据,然后再按条件修改内容,最后需要save()一下

例:将id=2的书的价格改为45

 方法二(适用于批量修改数据):

直接调用QuerySet的update(属性=值)实现批量修改

例:将id大于3的所有图书价格定为0元

ORM—删除操作

方法一(单个数据删除):

步骤:1.查找查询结果对应的一个数据对象

           2.调用这个数据对象的delete()方法实现删除

例:删除id=3的图书

方法二(批量删除):

利用前面学到的filter()查询条件来进行删除

总结

        今天所学的这些命令是ORM在与数据库进行交互时所用到的,在Django比较重要,希望本篇文章对你有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值