zoukankan      html  css  js  c++  java
  • 单表查询

    单表查询

    创建表

    创建模型
    在models.py中定义类,一个类就是一张表
    from django.db import models
    
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=64)
        pub_data = models.DateField()
        price = models.DecimalField(max_digits=5, decimal_places=2)
        publish = models.CharField(max_length=12)
        def __str__(self):
            return self.name
    
    字段与参数
    AutoField                   自增长
    BigAutoField    
    SmallIntegerField           小整数 -32768 32767
    PositiveSmallIntegerField   正小整数 0 32767
    IntegerField                -2147483648 2147483647
    PositiveIntegerField        0 2147483647
    BigIntegerField             -9223372036854775808 9223372036854775807
    BooleanField                布尔值类型
    NullBooleanField            可以为空的布尔值
    CharField                   字符类型,必须提供max_length参数
    DateField                   日期格式      YYYY-MM-DD
    TimeField                   时间格式      HH:MM[:ss[.uuuuuu]]
    FloatField                  浮点型
    DecimalField                10进制小数
        参数:
        max_digits,小数总长度
        decimal_places,小数位长度
    BinaryField                 二进制类型
    
    参数
    null        如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
    blank       如果为True,该字段允许不填。默认为False
    default     字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
    primary_key 如果为True,那么这个字段就是模型的主键。
    unique      如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
    choices     由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。
    

    settings配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'lqz',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'ATOMIC_REQUEST': True
        }
    }
    ATOMIC_REQUEST设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
    是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 
    

    增加删除字段

        删除,直接注释掉字段,执行数据库迁移命令即可
    
      新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,此时需要设置
      
    注意:
      1 数据库迁移记录都在 app01下的migrations  2 使用showmigrations命令可以查看没有执行migrate的文件
      3  makemigrations是生成一个文件,migrate是将更改提交到数据量
    

    添加表记录

    方式一:

    book_obj=Book.objects.create(title="python",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
    

    方式二

    book_obj=Book(title="python",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
    book_obj.save()
    

    查询表记录

    all()               查询所有结果
    filter(**kwargs)    返回QuerySet对象,它包含了与所给筛选条件相匹配的对象
    get(**kwargs)       只能查询只有一个符合条件的对象,返回该对象
    exclude(**kwargs)   它包含了与所给筛选条件不匹配的对象
    order_by(*field)    对查询结果排序('id')默认由小到大,('-id')又大到小
    reverse()           对查询结果反向排序
    count()             返回数据库中匹配查询(QuerySet)的对象数量。
    first()             返回第一条记录
    last()              返回最后一条记录
    exists()            如果QuerySet包含数据,就返回True,否则返回False
    values(*field)      返回一个ValueQuerySet,其中包含的是一个个字典
    values_list(*field) values()返回的QuerySet中的字典变元组
    distinct()          从返回结果中剔除重复纪录
    
    模糊查询
    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")
    Book.objects.filter(title__icontains="python")
    Book.objects.filter(title__startswith="py")
    Book.objects.filter(pub_date__year=2012)
    

    删除记录

    queryset对象可以调用,对象可以调用
    ret=Book.objects.filter(name='水浒传').delete()
    ret=Book.objects.filter(name='红楼梦').first().delete()
    (1, {'app01.Book': 1})  1 影响一条记录   被影响的表名   1 影响这个表的记录
    print(ret)
    这不可以 manager对象
    ret=Book.objects.delete() #这个是manager对象,不可以
    这个可以
    ret=Book.objects.all().delete()
    

    修改记录

    Book.objects.filter(title__startswith="py").update(price=120)
    返回值为影响的条数
    

    在python脚本中调用Django环境

    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
        import django
        django.setup()
    
        from app01 import models
    
        books = models.Book.objects.all()
        print(books)
    

    Django终端打印SQL语句

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }
  • 相关阅读:
    Expression基础体验
    浅谈Pool对象
    TreeBuilder科学的树创建器
    2种负载均衡算法
    亲自打造Deferred对象
    Animation
    micro-template改造
    Node.js的缺陷
    让JSON.js完全适应.NET
    关系型数据库操作一些不好用的地方
  • 原文地址:https://www.cnblogs.com/luck-L/p/9621071.html
Copyright © 2011-2022 走看看