python的django中ORM框架中数据库的增删改查操作

1 增加

增加数据有两种方法。

1)save

通过创建模型类对象,执行对象的save()方法保存到数据库中。

from datetime import date
book = BookInfo(
btitle=‘西游记’,
bpub_date=date(1988,1,1),
bread=10,
bcomment=10
)

book.save()
hero = HeroInfo(
hname=‘孙悟空’,
hgender=0,
hbook=book
)

hero.save()
hero2 = HeroInfo(
hname=‘猪八戒’,
hgender=0,
hbook_id=book.id
)

hero2.save()
2)create

通过模型类.objects.create()保存。

HeroInfo.objects.create(
hname=‘沙悟净’,
hgender=0,
hbook=book
)
<HeroInfo: 沙悟净>

2 删除

删除有两种方法

1)模型类对象delete

hero = HeroInfo.objects.get(id=13)

hero.delete()

2)模型类.objects.filter().delete()

HeroInfo.objects.filter(id=14).delete()

3 修改

修改更新有两种方法

1)save

修改模型类对象的属性,然后执行save()方法

hero = HeroInfo.objects.get(hname=‘猪八戒’)

hero.hname = ‘猪悟能’

hero.save()

2)update

使用模型类.objects.filter().update(),会返回受影响的行数

HeroInfo.objects.filter(hname=‘沙悟净’).update(hname=‘沙僧’)

4 查询

1 基本查询
get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。

all 查询多个结果。

count 查询结果数量。

BookInfo.objects.all()
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飞狐>, <BookInfo: 西游记>]>

book = BookInfo.objects.get(btitle=‘西游记’)
book.id
5

BookInfo.objects.get(id=3)
<BookInfo: 笑傲江湖>

BookInfo.objects.get(pk=3)
<BookInfo: 笑傲江湖>

BookInfo.objects.get(id=100)
Traceback (most recent call last):
File “”, line 1, in
File “/Users/delron/.virtualenv/dj/lib/python3.6/site-packages/django/db/models/manager.py”, line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File “/Users/delron/.virtualenv/dj/lib/python3.6/site-packages/django/db/models/query.py”, line 380, in get
self.model._meta.object_name
db.models.DoesNotExist: BookInfo matching query does not exist.

BookInfo.objects.count()
6

2 过滤查询
实现SQL中的where功能,包括

filter 过滤出多个结果
exclude 排除掉符合条件剩下的结果
get 过滤单一结果
对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。

过滤条件的表达语法如下:

属性名称__比较运算符=值

#属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线

1)相等

exact:表示判等。
例:查询编号为1的图书。

BookInfo.objects.filter(id__exact=1)
可简写为:
BookInfo.objects.filter(id=1)

2)模糊查询

contains:是否包含。
说明:如果要包含%无需转义,直接写即可。
例:查询书名包含’传’的图书。

BookInfo.objects.filter(btitle__contains=‘传’)

startswith、endswith:以指定值开头或结尾。
例:查询书名以’部’结尾的图书

BookInfo.objects.filter(btitle__endswith=‘部’)

以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

3) 空查询

isnull:是否为null。
例:查询书名不为空的图书。

BookInfo.objects.filter(btitle__isnull=False)

4) 范围查询

in:是否包含在范围内。
例:查询编号为1或3或5的图书

BookInfo.objects.filter(id__in=[1, 3, 5])

5)比较查询

  • gt 大于 (greater then)
  • gte 大于等于 (greater then equal)
  • lt 小于 (less then)
  • lte 小于等于 (less then equal)

例:查询编号大于3的图书

BookInfo.objects.filter(id__gt=3)

不等于的运算符,使用exclude()过滤器。

例:查询编号不等于3的图书

BookInfo.objects.exclude(id=3)

6)日期查询

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

例:查询1980年发表的图书。

BookInfo.objects.filter(bpub_date__year=1980)

例:查询1980年1月1日后发表的图书。

BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))

发布了58 篇原创文章 · 获赞 14 · 访问量 9361

猜你喜欢

转载自blog.csdn.net/lh_hebine/article/details/99638887