• 学习笔记-Python-Django-models


    # Models模型
    - ORM
    - ObjectRelationMap:把面向对象思想转换成关系型数据库,操作上把类当成数据库里的一张表
    - 类对应表格
    - 类中的属性对应表中的字段
    - 在应用中的models.py文件中定义class
    - 所有需要使用ORM的class都必须是models.Model的子类
    - class中所有属性对应表格中的字段
    - 字段的类型都必须使用modles.xxx不能使用python中的类型
    - 在django中,Models负责跟数据库交互
    - django链接数据库
    - 自带默认数据库sqlite3
    - 关系型数据库
    - 轻量级
    - 单文件数据库,很小
    - 建议开发用sqlite3,实际部署用mysql子类数据库,下面是如何切换mysql数据库的步骤
    - 1、切换数据库在setting中设置
    # django链接mysql
    DATABASE = [
    'default' : {
    'ENGINE':'django.db.backends.mysql',
    'NAME':'数据库名',
    'PASSWORD':'数据库密码',
    'HOST':'127.0.0.1',
    'PORT':'3306',
    }
    ]
    - 2、需要在项目文件下的__init__.py文件中导入pymysql包
    '''
    # 在主项目的__init__.py文件中
    import pymysql
    pymysql.install_as_MySQLdb()
    '''
    # models类的使用
    - 定义和数据库表映射的类
    - 在应用中的models.py文件中定义class
    - 所有需要使用ORM的class都必须是models.Model的子类
    - class中所有属性对应表格中的字段
    - 字段的类型都必须使用modles.xxx不能使用python中的类型
    - 字段常用参数
    1、max_length:规定数值的最大长度
    2、blank:是否允许字段为空,默认不允许
    3、null:在DB中控制是否保存为null,默认为false
    4、default:默认值
    5、unique:唯一
    6、verbose_name:假名
    - 数据库的迁移(在models里创建类后通知数据库)
    1、在命令行中,生成数据迁移的语句(生成sql语句)
    python manage.py makemigrations
    2、在命令行中,输入数据迁移的指令
    python manage.py migrate
    如果迁移中没有变化或者报错,可以强制迁移
    1、python manage.py makemigrations 应用名
    2、python manage.py migrate 应用名
    对于默认数据库,为了避免出现混乱,前提是数据库中没有数据,可以删除自定义app下的migrations文件夹和db.sqlites3数据库

    - 查看数据库中的数据
    1.启动命令行:python manage.py shell
    注意点:对orm的操作分为静态函数和非静态函数两种,静态函数是指在内存中类共用的,非静态函数是指每个实例掌握的
    2.在命令行中导入对应的映射类
    from 应用.models import 类名
    3.使用object属性操作数据库,object是模型中实际和数据进行交互的
    4.查询命令
    类名.objects.all()查询数据库表中的所有内容,返回的结果是一个QuerySet查询集合类型
    类名.object.filter(条件)
    常见查找方法
    1、通用查找格式:属性名__条件符号=值
    条件符号有:
    gt:大于
    gte:大于等于
    lt:小于
    lte:小于等于
    range:范围
    year:年份
    isnull:是否为空
    2、查找等于指定值的格式:属性名=值
    3、模糊查找:属性名__查找方式=值
    查找方式有:
    exact:精确等于
    iexact:不区分大小写
    contains:包含
    startwith:以..开头
    endwith:以..结尾

     

    - 数据库表关系
    - 多表联查:利用多个多联合查找某一项信息或者多项信息
    - 1:1 OneToOne
    - 建立关系:在模型任意一边即可,使用OneToOneField
    - add:
    1、create方法,返回类型是<class 'rlt.models.Manager'>
    2、实例化方法,直接实例化保存,推荐这种方法
    - query:
    - 由子表查母表(定义关系的表叫子表),由子表的属性直接提取信息
    - 由母表查子表,使用双下划线
    - change:
    - 单个修改后使用save保存
    - 批量修改使用update
    - 无论是对子表还是母表修改方法都一样
    - delete:直接使用delete删除

     

    - 1:N OneToMany
    - 一个表格的一个数据项/对象等,可有很多个另一个表格的数据项
    - 比如,一个学校可有很多个老师,一般一个老师只会在一个学校上课
    - 使用上
    - 使用ForeignKey
    - 在多的那一边,比如上面的例子就是在Teacher表格里进行定义
    - add:
    - 跟一对一方法类似,通过cerate和new来添加
    - create:把属性都填满,然后不需要手动保存
    - new:可以属性或者参数为空,必须用save保存
    - query:
    - 以学校和老师举例
    - 如果知道老师,查学校,则通过增加的关系属性,直接使用
    - 反查
    - 由学校,想查下这个学校所有老师,则在学校后跟老师这个类(类名称小写)接下划线set来表示
    - 可以简单理解成teacher_set是School类里的一个隐藏属性

    
    
    - N:N ManyToMany
    - 两表之间相互拥有对方表格里的多项数据
    - 比如典型例子就是老师和学生,老师可以有多个学生,学生也可以有多个老师
    - 使用上,在任意一方,使用ManyToMany定义,只需要定义一边
    - add:
    - 添加老师,则在Student实例.teachers.add(),也可以用create方法
    - query:
    - 跟一对多类似,使用set查询

    
    
  • 相关阅读:
    VS2017 C# winform 项目使用 sqlite (二)
    VS2017 C# winform 项目使用 sqlite (一)
    JS权威指南笔记(171页)-this关键字的作用域
    量化交易之下单函数和context对象
    量化交易策略基本框架
    初始量化交易
    金融量化之Tushare模块
    Python之基础算法介绍
    数据分析之Matplotlib和机器学习基础
    数据分析之Pandas
  • 原文地址:https://www.cnblogs.com/Cloudloong/p/10114362.html
Copyright © 2020-2023  润新知