Django学习 day58之Django第九日

模型层models

一 常用和非常用字段、参数概览

常用字段

IntegerField 整数
AutoField 自增
BooleanField 布尔
CharField varchar
DateField 年月日
DateTimeField 年月日时分秒
DecimalField 小数
FileField 上传文件,本质是varchar
ImageField 图片,本质是varchar,继承了FileField
TextField 存大文本
EmailField 本质是varchar

非常用字段

BigAutoField
SmallIntegerField
PositiveSmallIntegerField 正小整数
PositiveIntegerField 正整数
BigIntegerField

'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)',

常用参数

null
max_length
default
primary_key
unique
db_index

choices:比较常用(后面再说)
blank: django admin里提交数据,限制

元数据(必须记住)

写在创建表的类里面,是类中类

class Meta:
	# 改表名,记得迁移
	db_table = "book"
	# 联合索引
	index_together = [
	("name", "publish"),
	]
	# 联合唯一索引
	unique_together = (("name", "publish"),)
	
	# 了解
	# admin中显示的表名称
	verbose_name='图书表'  # admin中显示样式为verbose_name加s
	verbose_name_plural='图书表'  # admin中显示样式为verbose_name_plural

二 打印原生sql

配置文件settings.py中写入,建议直接粘贴
CV打法好哇!

LOGGING = {
    
    
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
    
    
        'console':{
    
    
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
    
    
        'django.db.backends': {
    
    
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

三 查询单表记录API

以下都属于objects的方法

  1. all(): 查询所有结果
  2. filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
  3. get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  4. exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
  5. order_by(*field): 对查询结果排序,(给排序方法加减号代表降序,如:’-id’)
  6. reverse(): 对查询结果反向排序,必须结合order_by,如:order_by(‘id’).reverse(),等同于order_by(’-id’)
  7. count(): 返回数据库中匹配查询(QuerySet)的对象数量。
  8. first(): 返回第一条记录
  9. last(): 返回最后一条记录
  10. exists(): 如果QuerySet包含数据,就返回True,否则返回False,说白了就是判断结果有没有值
  11. values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
  12. values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
  13. distinct(): 从返回结果中剔除重复纪录

四 基于双下划线的模糊查询

1 价格在[100,200,300]这个范围内

Book.objects.filter(price__in=[100,200,300])

2 大于,小于,大于等于,小于等于

Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)

3 范围

Book.objects.filter(price__range=[100,200])

4 包含

Book.objects.filter(title__contains="python")

5 忽略大小写包含

Book.objects.filter(title__icontains="python")

6 以xx开头

Book.objects.filter(title__startswith="py")

7 时间类型,年份是2012年的

Book.objects.filter(pub_date__year=2012)

五 删除表记录

删除的两种方式

第一种:queryset的delete方法

res=models.Book.objects.all().delete()
print(res)

第二种:对象自己的delete方法

book = models.Book.objects.all().filter(name='金瓶梅').first()
print(type(book))
res=book.delete()

六 修改表记录

修改记录

第一种:queryset的update方法

res=models.Book.objects.filter(publish='东京').update(name='金瓶梅1')  # 将出版社都是东京的书,统一改名
print(res)

第二种:对象自己的

book = models.Book.objects.filter(name='xxx').last()
book.name='asdfasd'
book.save()

七 python脚本中调用django环境

在脚本中调用djagno服务

在项目根目录创建创建py文件

import os
if __name__ == '__main__':
    #1  引入django配置文件
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day67.settings')
    # 2 让djagno启动
    import django
    django.setup()
    # 3 使用表模型
    from app01 import models
    models.Book.objects.create(name='测试书籍',publish='xx出版社')  # 插入数据

八 补充

时区和国际化问题

setting.py

  1. 后台管理汉语问题
    LANGUAGE_CODE = 'zh-hans' 管理后台看到的就是中文
  2. 时区问题(使用东八区)
    TIME_ZONE = 'Asia/Shanghai'
    USE_TZ = False
    

django admin(管理后台的简单使用)

  1. 管理后台是django提供的可以快速对表进行增删查改操作

  2. 创建一个后台管理账号

    1. python3 manage.py createsuperuser
    2. 输入用户名
    3. 输入邮箱(可以不填,敲回车)
    4. 输入密码
    5. 确认密码
      超级用户创建出来了,可以登录管理后台了
  3. 让admin中表中一行一行的数据显示我们定制的样子的方法
    重写模型类的__str__方法,也就是与class Meta同层级添加def __str__

blank参数作用

  1. 需要把book表注册到admin中
    在app下的admin.py中写
    from app01 import models
    把book表注册一下,管理后台就能看到了
    admin.site.register(models.Book)
  2. 可以在后台快速的对book表进行增删查改操作

猜你喜欢

转载自blog.csdn.net/wuzeipero/article/details/109053588