首页 > 其他分享 >Django之模型层

Django之模型层

时间:2022-12-14 22:22:31浏览次数:66  
标签:name models res 模型 Django filter objects User

模型层之前期准备

自带的sqlite3数据库对时间字段不敏感,有时候会展示错乱,所以我们习惯切换成常见的数据库比如MySQL,django orm并不会自动帮你创建库,所以需要提前准备好。

Django测试环境搭建

方式一(推荐):

  • 使用脚本形式:任意创建一个 py 文件(或者直接在test.py中), 在该文件内书写固定的配置(可以去manage.py文件中去复制前四行)
# 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行
import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day64.settings")
    import django
    django.setup()
    # 在这个代码块的下面就可以测试django里面的单个py文件了(注意: 导模块也要写在这下面)

 

 

方式二:

  • 直接使用pycharm提供的Python console窗口

 

 推荐使用方式一,Python Console测试报错进行修改之后,如果还是继续报错,有可能是之前的缓存影响。可以关闭一下此窗口,再重新打开输入测试语句再试一次。

ORM常用关键字

# 在models.py文件准备表

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=32,verbose_name='用户名')
    age = models.IntegerField(verbose_name='年龄')
    register_time = models.DateTimeField(verbose_name='注册时间', auto_now_add=True)

    """
    auto_now:每次修改数据的时候都会自动更新当前时间
    auto_now_add:只在数据创建的时候记录一次创建时间,后续不会自动更改
    """

 

1.create()

创建数据并直接获取当前创建的数据对象

res = models.User.objects.create(name='阿兵', age=28)
res = models.User.objects.create(name='oscar', age=18)
res = models.User.objects.create(name='jerry', age=38)
res = models.User.objects.create(name='jack', age=88)
print(res)

2.filter()

根据条件筛选数据,结果是QuerySet [数据对象1,数据对象2]

res = models.User.objects.filter()
res = models.User.objects.filter(name='jason')
res = models.User.objects.filter(name='jason', age=19)  # 括号内支持多个条件但是默认是and关系

3.first()、last()

QuerySet支持索引取值但是只支持正数 并且orm不建议你使用索引

res = models.User.objects.filter()[1]
res = models.User.objects.filter(pk=100)[0]  # 数据不存在索引取值会报错
res = models.User.objects.filter(pk=100).first()  # 数据不存在不会报错而是返回None
res = models.User.objects.filter().last()  # 数据不存在不会报错而是返回None

4.update()

更新数据(批量更新)

models.User.objects.filter().update()     # 批量更新
models.User.objects.filter(id=1).update()   # 单个更新

5.delete()

删除数据(批量删除)

models.User.objects.filter().delete()      # 批量删除
models.User.objects.filter(id=1).delete()   # 单个删除    

6.all()

查询所有数据,结果是QuerySet [数据对象1,数据对象2]

res = models.User.objects.all()

7.values()

根据指定字段获取数据,结果是QuerySet [{},{},{},{}]

res = models.User.objects.all().values('name')
res = models.User.objects.filter().values()
res = models.User.objects.values()

8.values_list()

根据指定字段获取数据,结果是QuerySet [(),(),(),()]

res = models.User.objects.all().values_list('name','age')

9.distinct()

去重(数据一定要一模一样才可以,如果有主键肯定不行)

res = models.User.objects.values('name','age').distinct()

10.order_by()

根据指定条件排序,默认是升序,字段前面加负号就是降序

res = models.User.objects.all().order_by('age')
print(res)

11.get()

根据条件筛选数据并直接获取到数据对象 一旦条件不存在会直接报错 不建议使用

res = models.User.objects.get(pk=1)
print(res)
res = models.User.objects.get(pk=100, name='jason')
print(res)

12.exclude()

取反操作

res = models.User.objects.exclude(pk=1)
print(res)

13.reverse()

颠倒顺序(被操作的对象必须是已经排过序的才可以)

res = models.User.objects.all()
res = models.User.objects.all().order_by('age')
res1 = models.User.objects.all().order_by('age').reverse()
print(res, res1)

14.count()

统计结果集中数据的个数

res = models.User.objects.all().count()
print(res)

15.exists()

判断结果集中是否含有数据 如果有则返回True 没有则返回False

res = models.User.objects.all().exists()
print(res)
res1 = models.User.objects.filter(pk=100).exists()
print(res1)

 

标签:name,models,res,模型,Django,filter,objects,User
From: https://www.cnblogs.com/chen-ao666/p/16983819.html

相关文章

  • django之模型层
    目录模型层模型层前期准备模型层之ORM常见关键字模型层模型层前期准备使用djangoORM要注意​ 1、django自带的sqlite3数据可对时间字段不敏感,有时候会展示错乱,所以我......
  • django 5 模板层补充与模型层基础
    今日内容详细目录今日内容详细模板层之标签自定义过滤器、标签及inclusion_tag(了解)模板的继承与导入模型层模型层之前期准备ORM常用关键字模板层之标签{%if条件1(可......
  • python之路49 模板层标签 自定义过滤器 模板继承、模型层准备、ORM部分操作
    模板层之标签{%if条件1(可以自己写也可以是用传递过来的数据)%}<p>周三了周三了</p>{%elif条件2(可以自己写也可以用传递过来的数据)%}<p>百日......
  • django5
    模板层之标签{%if条件1(可以自己写也可以用传递过来的数据)%}<p>今天又是周三了</p>{%elif条件2(可以自己写也可以用传递过来的数据)%}<p>百日......
  • 模板层之标签、自定义过滤器、标签及inclusion_tag(了解)、模板的继承与导入、模型层
    模板层之标签(类似于python流程控制)在django模板语法中写标签的时候,只需要写关键字然后tab键就会自动补全。1.if判断{%if条件%}#条件一般是模板语法传过来的数......
  • django模板层与模型层
    内容导航模板层之标签自定义过滤器、标签及inclusion_tag(了解)母版的继承与导入模型层之ORM常见关键字内容详细模板层之标签{%if条件1(可以自己写也可以用......
  • djando之模型层
    模型层之前期准备1.自带的sqlite3数据库对时间字段不敏感,有上海会展示错乱,所以我们习惯切换成常见的数据库入MySQLdjangoorm并不会自动帮你创建库,所以需要提前准备好2......
  • 评价模型 - 层次分析法
    应用场景:决策模型(通过赋权,然后利用加权值来进行决策)、给指标赋权准则层:先给这5个部分进行\(5\times5\)的赋权(比如,景色相比费用略微重要,赋成3),然后对这个矩阵进行求解,得......
  • django 06 模型层
    模型层使用准备#1.django自带的sqllite3对时间字段不敏感,所以使用mysql会更常见#2.单独测试django某个功能层"""django默认是不可以单独测试py文件的"""......
  • 模板层之标签、自定义模板语法、母版(模版)的继承与导入、模型层前期准备知识点、ORM常
    模板层之标签模板语法支持if判断(支持elif):{%if条件1(可以自己写也可以用传递过来的数据)%}<p>今天又是周三了</p>{%elif条件2(可以自己写也可以用传递过......