zoukankan      html  css  js  c++  java
  • Python

    models.py:

    from django.db import models
    
    
    class Human(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        birthday = models.DateField(auto_now_add=True)
    

    在数据库中添加几条数据

    在 Python 脚本中调用 Django 环境:

    在 mysite2 下创建 orm_test.py

    在 orm_test.py 中添加以下内容:

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    

    ORM 操作:

    all():查询所有结果

    orm_test.py:

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.all()
        print(ret)
    

    运行结果:

     

    返回 QuerySet 对象,QuerySet 对象继承列表,所以可以使用列表的操作

    get():返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret_id = models.Human.objects.get(id=2)
    	print(ret_id)
        ret_name = models.Human.objects.get(name="Alex")
        print(ret_name)
    

     运行结果:

    filter():返回与所给筛选条件相匹配的对象

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.filter(id=3)
        print(ret)
    

    运行结果:

    返回了一个列表

    如果没有匹配上的话,不会报错,会返回一个空值

    exclude():返回与所给筛选条件不匹配的对象

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.exclude(id=1)
        print(ret)
    

    运行结果:

    返回除 id=1 外的所以数据

    values():返回一个 ValueQuerySet,一个特殊的 QuerySet,运行后得到的并不是一系列 model 的实例化对象,而是一个可迭代的字典序列

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        # 返回所有字段名为 name 的数据
        ret = models.Human.objects.values("name")
        print(ret)
    	
        # 返回所有字段名为 name 和 birthday 的数据
        ret1 = models.Human.objects.values("name", "birthday")
        print(ret1)
    

    运行结果:

    返回的是字典类型

    values_list():与 values() 相似,它返回的是一个元组序列,values 返回的是一个字典序列

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.values_list("name")
        print(ret)
    

    运行结果:

    count():返回数据库中匹配查询 QuerySet 的对象个数

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.all().count()
        print(ret)
    

    运行结果:

    first():返回第一条记录

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.all().first()
        print(ret)
    

    运行结果:

    last():返回最后一条记录

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.all().last()
        print(ret)
    

    运行结果:

    exists():如果 QuerySet 包含数据,就返回 True,否则返回 False

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.all().exists()
        print(ret)
    

    运行结果:

    order_by():对查询结果按照某字段进行排序

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.order_by("name")
        print(ret)
    

    运行结果:

    name 按照字母顺序进行了排序

    在生成表的时候也可以指定默认的排序方法

    models.py:

    from django.db import models
    
    
    class Human(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        birthday = models.DateField(auto_now_add=True)
    
        def __str__(self):
            return "<Human Object: {}>".format(self.name)
        
        # 按照 name 排序
        class Meta:
            ordering = ("name",)
    

    这样生成的表在数据中就按 name 的字母顺序来排序

    reverse():对查询结果反向排序

    reverse() 通常只能在具有已定义顺序的 QuerySet 上调用(在model 类的 Meta 中指定 ordering 或调用 order_by() 方法)

    import os
    
    if __name__ == '__main__':
        # 加载 Django 项目的配置信息
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
        # 导入 Django,并启动 Django 项目
        import django
        django.setup()
    
        from app01 import models
    
        ret = models.Human.objects.order_by("name").reverse()
        print(ret)
    

    运行结果:

    distinct():从返回结果中剔除重复纪录(如果查询跨越多个表,可能在计算 QuerySet 时得到重复的结果。此时可以使用 distinct(),注意只有在 PostgreSQL 中支持按字段去重)

  • 相关阅读:
    Nginx与Apache的对比
    gc buffer busy waits(ZT)
    Brocade SAN Switch Change Domain ID (ZT)
    Oracle异机恢复时报错ora19870 ora19507
    row cache lock (ZT)
    can a select block a truncate (ZT)
    NBU常用命令
    the RRD does not contain an RRA matching the chosen C
    Solaris10 x64安装64bit perl
    Solaris and Oracle 32bit Linking Error "fatal: symbol 'ntcontab'
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11291608.html
Copyright © 2011-2022 走看看