python3之Django模型
2018-03-31 17:21
239 查看
新建项目为app为people,编辑people/models.py内容如下:
使用命令:
下面开始使用Django提供的QuerySetAPI
首先进入python的shell:
加入一条记录:
我们新建了一个用户WeizhongTu 那么如何从数据库是查询到它呢?
我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示,这里并没有显示出与WeizhongTu的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 people/models.py
退出shell,重新进入
新建一个对象的方法有以下几种:
Person.objects.create(name=name,age=age)
p = Person(name=”WZ”, age=23)
p.save()
p = Person(name=”TWZ”)
p.age = 23
p.save()
Person.objects.get_or_create(name=”WZT”, age=23)
这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
获取对象有以下方法:
Person.objects.all()
Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
Person.objects.get(name=name)
get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
Person.objects.filter(name=”abc”) # 等于Person.objects.filter(name__exact=”abc”) 名称严格等于 “abc” 的人
Person.objects.filter(name__iexact=”abc”) # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
Person.objects.filter(name__contains=”abc”) # 名称中包含 “abc”的人
Person.objects.filter(name__icontains=”abc”) #名称中包含 “abc”,且abc不区分大小写
Person.objects.filter(name__regex=”^abc”) # 正则表达式查询
Person.objects.filter(name__iregex=”^abc”) # 正则表达式不区分大小写
filter是找出满足条件的,当然也有排除符合某条件的
Person.objects.exclude(name__contains=”WZ”) # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains=”abc”).exclude(age=23) # 找出
4000
名称含有abc, 但是排除年龄是23岁的
from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField()
使用命令:
python3 manage.py makemigrations python3 manage.py migrate
下面开始使用Django提供的QuerySetAPI
首先进入python的shell:
python3 manage.py shell
加入一条记录:
>>> from people.models import Person >>> Person.objects.create(name="WeizhongTu", age=24) <Person: Person object> >>>
我们新建了一个用户WeizhongTu 那么如何从数据库是查询到它呢?
>>> Person.objects.get(name="WeizhongTu") <Person: Person object> >>>
我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示,这里并没有显示出与WeizhongTu的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 people/models.py
from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField()
def __unicode__(self):
# 在Python3中使用 def __str__(self):
return self.name
退出shell,重新进入
新建一个对象的方法有以下几种:
Person.objects.create(name=name,age=age)
p = Person(name=”WZ”, age=23)
p.save()
p = Person(name=”TWZ”)
p.age = 23
p.save()
Person.objects.get_or_create(name=”WZT”, age=23)
这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
获取对象有以下方法:
Person.objects.all()
Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
Person.objects.get(name=name)
get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
Person.objects.filter(name=”abc”) # 等于Person.objects.filter(name__exact=”abc”) 名称严格等于 “abc” 的人
Person.objects.filter(name__iexact=”abc”) # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
Person.objects.filter(name__contains=”abc”) # 名称中包含 “abc”的人
Person.objects.filter(name__icontains=”abc”) #名称中包含 “abc”,且abc不区分大小写
Person.objects.filter(name__regex=”^abc”) # 正则表达式查询
Person.objects.filter(name__iregex=”^abc”) # 正则表达式不区分大小写
filter是找出满足条件的,当然也有排除符合某条件的
Person.objects.exclude(name__contains=”WZ”) # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains=”abc”).exclude(age=23) # 找出
4000
名称含有abc, 但是排除年龄是23岁的
相关文章推荐
- python-django的many to one模型
- Python笔记(六)- 模型及Django站点管理
- 虚拟环境中Django使用python3完成模型类的迁移
- python后台架构Django教程——数据模型Model
- python_Django之模板模型
- pythonWeb -- Django开发- 模型Model 和 数据库的操作
- python-django 模型model字段类型说明
- Python开发入门与实战5-django模型
- python+django(模型)
- Python Django框架根据模型不能新建表
- python web开发——Django模型简介
- python-django 模型model字段类型说明
- 【Python】django模型models的外键关联使用
- Python3之Django Web框架模型篇(一)
- python例子-Django之模型(Model_数据库)
- python初学-04django(数据库,模型)
- python django模型内部类meta详细解释
- Python框架Django -- 02 模型
- python-django 模型model字段类型说明
- django python query Making queries -- 模型的数据库查询 good