Django学习7—数据库使用2—使用api增删改查

继续上一次,我们已经可以连接mysql数据库了,而数据库最重要的操作,无非就是增删改查,Django提供了一系列api,用于增删改查,这样可以不使用sql语句来完成数据库操作。

增:

即向数据库插入数据,这里我们在交互式python中来学习,使用python manage.py shell(如果安装了Ipython这些的话,也可以使用它们),然后就是导包,假设,models.py文件为:

from __future__ import unicode_literals  
from django.db import models  
class Users(models.Model):  
    username=models.CharField(max_length=20)
    password=models.CharField(max_length=20) 
那么在交互式shell里,我们导入这个包

from testsql.blog.models import Users

这里testsql是工程名,blog是app名,具体的请根据自己的目录结构来写,写法为,基于manage.py的相对路径。

向数据库插入数据有三种方法:(等同于sql:insert into blog_users (name,password) values ('zhangsan','abc123456'))

1.user=Users(username='zhangsan',password='abc123456')

    user.save()

2.Users.objects.create(username='zhangsan',password='abc123456)

3.user=Users()

   user.name='zhangsan'

   user.password='abc123456'

即通过我们的model对象来创建实例,相应的就可以在数据库中建立与之对应的记录。

查:

首先是全部查找(等同于sql:select * from blog_users)

users=Users.objects.all()

注意这里返回的是Django的内建对象,如果需要获得值,还需要作如下处理:

users_values=users.values()

这样才能获得表中数据的一个列表,然后通过users_values[0]['name']或者users_values[0]['password']就可以获得查找出来的第一个数据的name和password。

然后是条件查找(等同于sql:select * from blog_users where name='zhangsan'):

users=Users.objects.filter(name='zhangsan')

这样就是查找name=zhangsan的记录,同样,这也是一个对象,获取值也需要像上面一样用values。

filter是查找所有满足条件的,而get是找到一个之后就返回(users=Users.objects.get(name='zhangsan')),同样返回的是对象,但无法使用values获得值,这里貌似1.8之前的可以不用values,直接能获得值,但1.8之后的,如果想要获得值的话,那么可以使用property,即在class中定义@property get方法(不清楚的请去看一下python的property,类似于c++这些的get方法),然后其它方法我还真没找到,下面这个又有局限性,请看:

Django提供了一些方法,比如__str__(python3)和__unicode__(python2),它们可以在调用的时候,直接返回值,比如:

User改为:

from __future__ import unicode_literals  
from django.db import models  
class Users(models.Model):  
    username=models.CharField(max_length=20)
    password=models.CharField(max_length=20) 
    def __unicode__(self):
        return self.username
如果加上__unicode__或者__str__方法之后,那么当使用users=Users.objects.filter(name='zhangsan')或者all,get这些方法获得数据库数据的时候,直接调用users就可以获得值了,但缺点是,只能返回一个,我试着以列表或者元组返回多个会报错,官方文档也只给了返回一个的例子,没有说能不能返回多个。

改和删:

这两个都很简单,一句话说了,它们都是在filter的基础上的,例如:

Users.objects.filter(name='zhangsan').delete()

这样就删除所有name为zhangsan的记录

Users.objects.filter(name='zhangsan').update(password='abc123')

这样就修改所有name为zhangsan的password了。

Django对于数据库操作的API还有很多,想深入研究的可以去官方文档上看看,接下来还剩一个就是原始sql的使用,下次继续。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值