Django初识(5.Model与QuerySet,数据库操作)

  • 数据库(仓库)
  • Model(仓库设计图)

fields:CharField,IntegerField,FloatField,DateTimeField,
            OneToOneField,ManyToManyField,Foreignkey

fields参数:max_length,choices

  • Instance(货物)
  • QuerySet  查询集(包裹)
                     类似列表的对象
                     可引索,切片,in(instance in queryset)

数据库连接

Django中支持PostgreSQLSQLite3MySQLOracle四中数据库,默认的数据库为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()获取关系表中所有的行,结果返回一个QuerySetSELECT * 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)>]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django中,QuerySet和Object是两个不同的概念。 1. QuerySet QuerySetDjango中的一个概念,它表示数据库操作的结果集合。QuerySet可以像列表一样进行迭代、切片等操作,但是它并不是真正的列表。当你执行一个查询操作时,Django会返回一个QuerySet对象,这个对象包含了一些查询结果的方法。这些方法可以用来进行进一步的过滤、排序、切片等操作QuerySet是惰性的,这意味着它只有在需要的时候才会执行查询,这有助于提高性能。 例如,以下代码创建了一个QuerySet对象,它包含了所有年龄大于18岁的用户: ``` from django.contrib.auth.models import User users = User.objects.filter(age__gt=18) ``` 2. Object Object指的是Django模型中的一个实例。一个模型是一个数据库表的抽象,它定义了表的结构和字段,每个实例则代表了表中的一行数据。你可以使用ORM API来创建、更新、删除和查询模型实例。 例如,以下代码创建了一个User模型的实例: ``` from django.contrib.auth.models import User user = User.objects.create(username='john') user.first_name = 'John' user.last_name = 'Doe' user.save() ``` 在这个例子中,我们首先创建了一个User实例,然后通过修改它的属性来更新它,最后使用save()方法将更改保存到数据库中。 总结 QuerySet和Object是Django中的两个不同的概念,它们分别代表了数据库操作的结果集合和模型中的一个实例。QuerySet是一个惰性的对象,它包含了一些查询结果的方法,可以用来进行进一步的过滤、排序、切片等操作。Object则代表了一个模型实例,你可以使用ORM API来创建、更新、删除和查询它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慵懒之龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值