django模型使用

之前写过一篇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语句,感兴趣的可以去看下官方文档。


上一篇:WeakMap and WeakSet(弱映射和弱集合)


下一篇:语义表征和评估