Django初识(5.Model与QuerySet,数据库操作)
2022/2/3 19:12:49
本文主要是介绍Django初识(5.Model与QuerySet,数据库操作),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 数据库(仓库)
- Model(仓库设计图)
fields:CharField,IntegerField,FloatField,DateTimeField,
OneToOneField,ManyToManyField,Foreignkeyfields参数:max_length,choices
- Instance(货物)
- QuerySet 查询集(包裹)
类似列表的对象
可引索,切片,in(instance in queryset)
数据库连接
Django中支持PostgreSQL、SQLite3、MySQL和Oracle四中数据库,默认的数据库为SQLite3,在新建项目中的setting.py文件中我们可以看到如下代码。其中的数据库配置为SQLite3:
倘若要使用其他数据库则需要加上其他参数,下面给出参数配置示例:
在django中倘若需要创建关系表,需要先创建对应的模型类,模型类需要继承django.db.models.Model
类,模型类需要定义在models.py
文件中。我们在初识3Django初识(3.ListView视图)中已经创建了一个模型,并且映射好了数据库,所以我们便可以利用Django提供的API对数据库表进行操作了。
数据库表中的常规操作
在利用Django的API进行DML前,需要运行python manage.py shell
进入命令交互界面,然后导入我们需要操作的模型类:
from Django01_app02.models import Person
增、删、改、查操作
首先是往关系表中插入数据,常用的方法有两种:
- 先创建模型类的实例,然后运行该实例的save()方法
- 直接调用模型类的create()方法
示例代码如下:
#向Person表中插入数据 ''' save()方法1 ''' Person(name='李四',age=18,gender=0,id_card=123456789123456789,address='郑州市',temperature=38.2).save() ''' save()方法2 ''' p=Person(name='李四',age=18,gender=0,id_card=123456789123456789,address='郑州市',temperature=38.2) p.save() ''' create()方法 ''' Person.objects.create(name='李四',age=18,gender=0,id_card=123456789123456789,address='郑州市',temperature=38.2)
然后是查询操作,Django中常用的查询方法以及含义如下表所示:
Django中的查询方法 | 功能 | 等价的SQL语句 |
模型类.objects.get() | 按条件过滤关系表中指定的行,结果返回一个Instance,但是在有多条相同查询结果时会报错 | SELECT * FROM table_name WHERE … |
模型类.objects.all() | 获取关系表中所有的行,结果返回一个QuerySet | SELECT * FROM table_name |
模型类.objects.filter() | 按条件过滤关系表中指定的行,结果返回一个QuerySet,如果没有指定则和all作用相同 | SELECT * FROM table_name WHERE … |
模型类.objects.values()/模型类.objects.values_list() | 选择关系表中指定的字段,并以字典/列表的格式返回 | SELECT col1, … ,coln FROM … |
例:
>>> Person.objects.filter() <QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]> >>> Person.objects.filter(id=1) <QuerySet [<Person: Person object (1)>]> >>> Person.objects.filter().values() ''' <QuerySet [{'id': 1, 'name': '张三', 'age': 20, 'gender': True, 'id_card': 123456789123456789, 'address': '北京市', 'temperature': 36.5}, {'id': 2, 'name': '李四', 'age': 18, 'gender': False, 'id_card': 123456789123456789, 'address': '郑州市', 'temperature': 38.2}]> ''' >>> Person.objects.filter().values_list() <QuerySet [(1, '张三', 20, True, 123456789123456789, '北京市', 36.5), (2, '李四', 18, False, 123456789123456789, '郑州市', 38.2)]> >>> Person.objects.filter(id=1).values() <QuerySet [{'id': 1, 'name': '张三', 'age': 20, 'gender': True, 'id_card': 123456789123456789, 'address': '北京市', 'temperature': 36.5}]>
修改数据同样有两种常用方法:
- 实例化修改,然后运行该实例的save()方法
- 利用update()函数
例如:
#方式一 >>> p=Person(name='张三',age=18gender=1,id_card=123456789123456789,address='北京市',temperature=36.5) >>> p.age=20 >>> p.save() #方式二 >>> ps=Person.objects.filter(id=1) >>> ps <QuerySet [<Person: Person object (1)>]> >>> ps.update(age=20)
其他操作
在Django中通过order_by()
函数可以实现排序,倘若要根据多个字段排序,则字段间需要用逗号分隔,若要将排序结果倒序则还需要调用reverse()
函数,示例代码如下:
Person.objects.order_by('id').values().reverse() ''' <QuerySet [ {'id': 2, 'name': '李四', 'age': 18, 'gender': False, 'id_card': 123456789123 456789, 'address': '郑州市', 'temperature': 38.2}, {'id': 1, 'name': '张三', 'age': 20, 'gender': True, 'id_card': 123456789123456789, 'address': '北京市', 'temperature': 36.5} ]> '''
Django中提供了类似于python列表的索引方式,索引也是从0开始,示例代码如下:
>>> Person.objects.filter()[0] <Person: Person object (1)> >>> Person.objects.filter()[0:5] <QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]> >>> Person.objects.filter()[0:5:2] [<Person: Person object (1)>]
这篇关于Django初识(5.Model与QuerySet,数据库操作)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享