Django06模型(Model)
2017-06-04 20:07
155 查看
Django 模型(数据库)
« Django 模板进阶Django QuerySet API »
Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
本节的最后有源代码,但建议初学者按照代码操作,有问题再下载源代码和自己的代码进行比较。
多动手,这是学习编程最好的方法!
1. 新建项目和应用
那project和app什么关系呢?
一个项目一般包含多个应用,一个应用也可以用在多个项目中。
2. 添加应用
将我们新建的应用(people)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
我们打开 people/models.py 文件,修改其中的代码如下:
这里用到了两种Field,更多Field类型可以参考教程最后的链接。
4. 创建数据表
我们来同步一下数据库(我们使用默认的数据库 SQLite3,无需配置)
Django 1.7.x 以上版本的同学会看到
我们会看到,Django生成了一系列的表,也生成了我们新建的people_person这个表,那么如何使用这个表呢?
5. 使用 Django 提供的 QuerySet API
Django提供了丰富的API, 下面演示如何使用它。
name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等)
也不能有Python中的关键字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因为它是Python的关键字( import keyword;
print(keyword.kwlist) 可以打出所有的关键字)
新建一个对象的方法有以下几种:
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) # 找出名称含有abc, 但是排除年龄是23岁的
源代码下载:
learn_models_Django1.6.zip
learn_models_Django1.11.zip
参考文档:
更多相关内容:http://code.ziqiangxuetang.com/django/django-queryset-api.html
Django models 官方教程: https://docs.djangoproject.com/en/dev/topics/db/models/
Fields相关官方文档:https://docs.djangoproject.com/en/dev/ref/models/fields/
相关文章推荐
- Django学习06---Model模型(数据库)
- Django文档翻译:模型参考(Model Reference)
- Django教程03 模型(model)
- django Model模型二及Model模型对数据库的操作
- python例子-Django之模型(Model_数据库)
- Django--model模型绑定_数据库操作
- Django文档翻译:模型参考(Model Reference)
- django学习——Model模型中多对多外键如何查询
- django 模型model与数据库3——高级操作(外联,多对多,修改字段)
- Django学习07---model模型以及关系模型
- Django 模型字段类型总结 (Django Model field types summary)
- Django-model进阶(中介模型,查询优化,extra,整体插入)
- Django中模型Model添加JSON类型字段的方法
- django模型中的字段和model名显示为中文小技巧分享
- django模型中的字段和model名显示为中文小技巧分享
- django 模型model与数据库1
- Django 模型系统(model)&ORM--基础
- pythonWeb -- Django开发- 模型Model 和 数据库的操作
- Django --- 从已有数据库生成模型 (model)
- python后台架构Django教程——数据模型Model