美文网首页
django02数据库属性等

django02数据库属性等

作者: fly5 | 来源:发表于2018-09-29 16:51 被阅读0次

一、坑点问题

  • 问题:
    • 1、路由规则
    • 2、模型结构和表单
    • 3、浏览器缓存

1.注意 /

2.修改完模型之后,需要执行生成迁移文件,执行迁移操作

3

  • 问题描述:
    一个页面重复刷新时,数据已经发生改变,但页面没有改变
  • 问题分析:
    • 浏览器机制(缓存)
    • [缓存时根据url]
  • 解决:
    • 清空浏览器缓存;
    • 改端口号(url改变):
      python manage.py runserver 9000 # 端口号为900
      python manage.py runserver 0.0.0.0:8000 # 绑定本机IP
      python manage.py runserver 0:9000 # 简写绑定本机IP

二、属性定义

  • 字段类型

    AutoField 自增长
    CharField 字符串
    IntegerField 整型
    FloatField 浮点型
    DecimalField  浮点数(长度)
    BooleanField 布尔类型
    NullBooleanField null/true/false
    DateField 日期
        auto_now
        auto_now_add
    TimeField 时间
        auto_now
        auto_now_add
    DateTimeField 时间和日期
        auto_now
        auto_now_add
    
    

    默认系统会自动设置id主键

  • 字段选项

    null 是否空
    blank 是否未空白
    default 默认值
    primary_key 主键
    unique 是否唯一
    
  • 关系

    一对一:OneToOneField
    一对多:ForeignKey
    多对多:ManyToManyField
    
  • 逻辑删除

三、模型查询

  • 过滤器(结果集)

    - all() 所有数据
    - filter() 符合要求(过滤)
        filter(键=值)
        filter(键=值).filter(键=值)
        filter(键=值,键=值...)
    - exclude() 过滤掉符合要求的
        pk -> primary key 
        默认是id 【id与pk等价】
    - order_by() 排序
        students = student.objects.order_by('-score') # 倒序
        student.objects.order_by('score') # 正序
    - values 结果集(一个个字典)
    
  • 单个数据

    - get() 符合要求的对象【__self__】
        
        没有时,会‘DoesNotExist’ 异常
        多个时,会‘MultipleObjectsReturned’ 异常
    - first() 结果集中第一个
    - last() 结果集中最后一个
    
      count() 计数
          if students.count()>0:
              stu = students.first()
          else:
              stu = '无数据'
      exists() 是否有数据
           if students.exists()>0:
              stu = students.first()
          else:
              stu = '无数据'
    
    
    
  • 限制

    # student.objects.all()[x:y] ==> (x,y]
    student.objects.all()[1:3]
    
  • 元选项

    - db_table 表名属性
        db_table = 'students' 将默认表名改为students
    - odering  排序
        odering['score']  正序
        odering['-score']   倒序
    
    
  • 字段查询
    属性名__比较运算符=值

    - 属性名__lt 小于
    - 属性名__lte 小于等于
    - 属性名__gt 大于
    - 属性名__gte 大于等于
    - 属性名__contains 包含xx 【区分大小写】
        students =student.objects.filter(name__contains='22')
        
    - 属性名__icontains 包含xx 【不区分大小写】
    
    - 属性名__startswith  以xx开头  【区分大小写】
        students =student.objects.filter(name__startswith='22')
        
    - 属性名__istartswith  以xx开头  【不区分大小写】
    
    - 属性名__endswith  以xx结尾    【区分大小写】
    
    - 属性名__iendswith  以xx结尾    【不区分大小写】
    
    - 属性名__in    在...内
    
    - 时间相关
        属性名__year  年
        属性名__month  月
        属性名__day  日
        属性名__hour  小时
        属性名__minute  分钟
        属性名__seconds  秒
        
    
    
  • 聚合函数
    student.objects.aggregate(聚合函数)
    - Avg() 平均 
    - Count() 计数
    - Max() 最大值
    - Min() 最小值
    - Sum() 求和
        m_score =student.objects.aggregate(Max('score'))
    
  • F对象
    对象类的属性比较(例如:年龄 大于 分数)
    students = student.objects.filter(s_age__gt=F('s_score'))
    
  • Q对象
    条件的封装,能使用与、或、非。
    # and,并列关系   &
        students = student.objects.filter( Q(s_age__gt=18)
        & Q(s_score__gt=80) )
    # or,或者关系    |
    # 非,取反        ~
    
  • 更新数据

    stu =student.objects.get(pk=2)
    stu.s_name = '张二'
    stu.save()
    
  • 删除数据

    stu =student.objects.get(pk=2)
    stu.delete()
    
    

四、数据库更换

ORM对象映射,屏蔽掉不同数据库的操作!
不同业务在选择不同数据库时,只需要更改数据库的连接即可!
数据库配置:setting -> DATABASE配置
默认为sqlite
    'ENGINE':'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR,'db.sqlite3')
    
    # 改为Mysql
    'ENGINE':'django.db.backends.mysql',
    'NAME': '数据库名',
    'USER': 'root',
    'PASSWORD': '1234',
    'HOST': '127.0.0.1',
    'PORT': '3306'
```
- 更改数据库配置
- 需要连接mysql的驱动
    # 安装
    $ pip install pymysql
    
    # 需要在__init__中设置
        import pymysql
        pymysql.install_as_MySQLdb()

- 执行迁移
    $ python manage.py migrate
    
    

```
> 请先创建好对应的数据库!!

相关文章

  • django02数据库属性等

    一、坑点问题 问题:1、路由规则2、模型结构和表单3、浏览器缓存 1.注意 / 2.修改完模型之后,需要执行生成迁...

  • django02

    模型操作 ① 在models.py中建立数据库模型 在views.py中通过学生信息表查找学生信息

  • sqlite基本使用

    创建一个这样的数据库表: 1.创建sqlite数据库,用于创建数据库、表、属性的初始化、更新等操作。 2.acti...

  • plist, 归档, 数据库(sqlite和CoreData)等

    plist, 归档, 数据库(sqlite和CoreData)等持久化方式的区别 1. 属性列表(plist) 涉...

  • openfire 属性困惑

    openfire 有 openfire.xml , 和数据库 保存配置属性 。当你用数据库 保存属性的情况下 ,...

  • CoreData数据库查询Swift2.1

    数据库查询 返回 符合条件的属性的总数或平均值等 NSExpression()方法添加 操作函数名 默认支持的函数...

  • 小程序全栈学习-数据的时间属性和倒序查询

    在数据库中经常有数据的create_time、update_time、delete_time等属性。TP5框架规定...

  • MySQL优化那些事 一

    MySQL常用优化方法:1、 数据库的设计,符合3范式,字段合理的属性(防止多余空间)等2、用Join代替子查询,...

  • 轻型数据库SQLite几个基础命令

    1.创建数据库 sqlite 数据库名.db 2.创建表 create table 表名(列属性1,列属性2,……...

  • @Transient注解理解

    @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字...

网友评论

      本文标题:django02数据库属性等

      本文链接:https://www.haomeiwen.com/subject/hhdboftx.html