之前写过一篇django的模型关系,今天腾出时间把上篇的兄弟篇补上,来学习下django orm, 利用django的模型可以很方便的对数据库进行操作,之前开发人员是必须要具备一定sql基础的,但如果有些开发人员就是不想了解sql呢,在之前,不懂那是万万不行的,但自从有了orm,开发人员就可以在不懂sql的情况下也能完成对数据库的增删改查操作,今天我们就来看看如何实现这些基本的需求,开始前我们先定义一个模型,在models.py文件里写入:
class Info(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField(default=0)
email = models.EmailField()
有了这个模型,我们就来看最基本的对数据操作实现方法,
1、查:
首先如果要获取所有信息,可以用all,代码如下:
all_per=Info.objects.all() #相当于select * from Info
如果要获取单个对象可用:
Info.objects.get(name=’john’)
如何要过滤返回的信息,例如要查询名字是john的,可以用filter:
Info.objects.filter(name=’john’) #相当于select * from Info where name=’jhon’
条件组合查询也是支持的,例如项目等于john,邮件是john@gmail.com的
Info.objects.filter(name=’john’, mail=’john@gamil.com’)
模糊查询,虽然这个不到万不得已不用,有时候还是有可能用到的,例如查询名字里包含john的,
INfo.objects.filter(name__contains=’john’) #相当于select * from Info where name LIKE ‘%john%’
当然如果你查询的某些数据不想要,可以用exclude,例如查询所有名字是john的,但email不是test@gmail.com的:
Info.objects.filter(name=’john’).exclude(email=’test@gmail.com’)
最后查完的数据如果想排个序,比如按年龄,可以这样:
Info.objects.all().order_by(‘age’),如果反向查下可以在age前面加一个-(减号)即可。
如果只想看前10个人呢,可以用切片,非常灵活,如下:
Info.objects.all().order_by(‘age’)[:10]
以上就是比较常用的查询对数据的操作了,基本满足我们对数据查询的需求,接下来我们说增加。
2、增
如果要添加一个用户,只需要获取用户的信息,一般是来自前台表单,实例化模型,然后调用save保存即可,例如:
person = Info(name=’john’,age=20, email=’john@gmail.com’)
person.save()
这二步就完成了数据的保存。
3、改
如果数据库中某个人邮箱写错了,可以先查出来,然后做更新:
p = Info.objects.get(name=’john’)
p.email=’test@gmail.com’
p.save()
这样就修改了这条记录,如果想对多条进行修改可以自己加条件过滤后修改,例如把所有条目的email全部修改成abc@gmail.com,当然这个例子有点扯,只是为说明用法:
Info.object.all().update(email=’abc@gmail.com’)
4、删除
最后我们说删除,用模型来操作非常简单,基本步骤是先查出你要删的对象,然后执行delete()即可,例如要删除名字是john的记录,可以这样:
p = Info.objects.filter(name=’john’)
p.delete()
这样就删除了,当然这是对1条记录的操作,删除整个表的方法我就不写了,有兴趣自己去查查吧
这篇就到这里,我个人感受是用orm来操作数据库还是非常方便的,整个代码中也不必写任何的sql语句,当然这种orm也并不能覆盖所有的操作,有的地方还是不得不写sql来完成,所以django也支持原生的sql语句,感兴趣的可以去看下官方文档。