Django day07 (二)单表操作

单表操作  

  -mysql数据库:settings里配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
    # 'default': {
    #     'ENGINE': 'django.db.backends.mysql',
    #     'NAME': 'day76',
    #     'HOST': '127.0.0.1',
    #     'PORT': 3306,
    #     'USER': 'root',
    #     'PASSWORD': 'nuanxin',
    # }
}

  -在init文件中:

import pymysql

# 因为Django默认连接mysql数据库,用的是MySQLdb,python3.0以后不支持MySQLdb,需要用pymysql替换
pymysql.install_as_MySQLdb()

  -在models中,写类,写类的属性

from django.db import models


# Create your models here.

# 创建表与表的字段 Field来表明这些字段是什么类型
class Book(models.Model):  # 类对应数据库的表
  # Auto自动递增 字段,对应数据库是一个列 id = models.AutoField(primary_key=True)
  # Char变量类型
name = models.CharField(max_length=32)
  # Decimal生成的字段 digits最大长度的位数 place小数点后几位
price = models.DecimalField(max_digits=5, decimal_places=2)
 # publish出版社 publish = models.CharField(max_length=32)
  # author作者 author = models.CharField(max_length=32)

  -数据库迁移

    python

 

  -新增表,删除表,新增字段,删除字段 ---> 执行数据库迁移的两条命令

    1.单表增:

      -两种方式

    2.单表修改:

      -先查询出来,然后update(queryset对象的方法)

      -对象要更新,用save方法

    3.单表删除:

      -先查询出来,然后delete(queryset对象和模型对象的方法)

      *****用queryset删除,修改的时候,一定要注意数据是几条

      -删除数据表中所有数据:Book.object.all().delete()单表查询

    4.单表查询(API):  

<1> all():                  查询所有结果
  
<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
  
<3> get(**kwargs):          (有且只有一条数据) 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  
<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
 
<5> order_by(*field):       对查询结果排序('-id')
  
<6> reverse():              对查询结果反向排序
  
<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
  
<9> first():                返回第一条记录
  
<10> last():                返回最后一条记录
  
<11> exists():              (查询一个结果是否有数据) 如果QuerySet包含数据,就返回True,否则返回False
 
<12> values(*field):        (字典里面有name,有id) 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                            model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
 
<14> 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") --->% python %
Book.objects.filter(title__endswith="py") --->%py
Book.objects.filter(title__startswith="py") --->py%
Book.objects.filter(title__icontains
="python") --->忽略大小写 Book.objects.filter(pub_date__year=2012,pub_date_month=12)

 

 

     

 

 

  

 

posted @ 2018-11-12 21:46  温暖你的心  阅读(134)  评论(0编辑  收藏  举报