• 06-模型基础


     模型基础

    01-Django的ORM简介

    02-数据库连接配置

    03-模型的创建与映射

    04-数据的增删改查

    01-Django的ORM简介

    Django的ORM系统的分析:

    1.ORM概念:对象关系映射(Object Relational Mapping,简称ORM)

    2.ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

    django模型映射关系

    1. 模型类必须都写在app下的models.py文件中。

    2. 模型如果需要映射到数据库,所在的app必须被安装.

    3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

    02-数据库的配置:

    1.在settings.py中配置DATABASES

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
            'NAME': 'crm',  # 数据库名称
            'USER': 'guang',  # 链接数据库的用户名
            'PASSWORD': 'q123',  # 链接数据库的密码
            'HOST': '127.0.0.1',  # mysql服务器的域名和ip地址
            'PORT': '3306',  # mysql的一个端口号,默认是3306
    
        }
    }

    2、pymsql数据库连接器的配置:

     在虚拟环境中安装pymysql: pip install pymysql

    设置连接器为pymysql:
    在主目录下的的__init__.py文件添加下面两句
    import pymysql
    pymysql.install_as_MySQLdb()

    03-模型的创建与映射

    就是django.db.models.Model 的一个子类。

    模型定义在app文件夹下的models.py文件

     

    常用的字段类型映射关系:


    常用字段类型参考:https://www.cnblogs.com/laoguiaabb/p/8182906.html


     

    激活模型

    1、创建迁移:python manage.py makemigrations appname

    必须要在settings中注册注册应用

    - 创建迁移 只是告诉django,我们修改了模型,它不会操作数据库
    python manage.py makemigrations appname

     

     2、 查看迁移执行命令:python manage.py sqlmigrate teacher 0001

    如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看它大概会执行什么sql语句(就是看低层执行的代码)

     

    执行迁移 操作数据库,将对模型的改动应用到数据库(底层就是执行了sql)

    3、  执行迁移:python manage.py migrate appname


    模型映射到数据库中是一张表 ,表名 = appname_模型name

    执行上面的命令,到底干了些什么?

    - 在app中查找迁移文件,并且去django_migrations表中查找,如果有没有执行的迁移文件,就去执行它

    - 执行了迁移生成的sql语句
    - 如果成功,会在django_migrations表中增加一条记录

    (修改迁移文件后需要重新创建迁移和执行迁移)

    04-数据的增删改查

    django 调试环境:python manage.py shell

    数据的增删改查----------增加数据

    1.在视图函数中导入User模型类,然后使用下面的方法添加数据

    数据的增删改查----------查找数据

    1.在视图函数中导入User模型类,然后使用下面的方法查数据

     

    all()和filter()方法返回的是QuerySet对象.

    get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!

    数据的增删改查----------修改数据

    1.在视图函数中导入User模型类,然后使用下面的方法修改数据

    在这之前,我们在模型类中添加了一个city的属性,并设置了一个默认值,然后执行了映射命令,讲字段成功映射到了数据库中.

    数据的增删改查----------删除数据

    1.在视图函数中导入User模型类,然后使用下面的方法删除数据

     数据的增删改查--------数据库相关的接口(QuerySet API)

    1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.

    2.QuerySet是可迭代对象.

    3.QuerySet支持切片, 不支持负索引.

    4.可以用list强行将QuerySet变成列表.

     数据的增删改查总结

    ### 增
    
    ```
    # 第一种方式
    In [3]: s = Student()                                                                                  
    
    In [5]: s.name = '心蓝'                                                                                
    
    In [6]: s.age = 18                                                                                     
    
    In [7]: Student.objects.all()                                                                          
    Out[7]: <QuerySet []>
    
    In [8]: s.save()  # save之后才会写到数据库
    
    # 第二种方式
    stu = Student.objects.create(name='敬子明', age=10)  # 直接创建
    ```
    
    ### 删
    
    ````
    In [12]: stu.delete()                                                                                  
    Out[12]: (1, {'teacher.Student': 1})
    # 删除多条
    
    In [12]: Student.objects.filter(sex=1).delete()                                                        
    Out[12]: (1, {'teacher.Student': 1})
    
    
    ````
    
    ### 改
    
    ```
    # 改一条
    In [16]: s.age = 16                                                                                    
    
    In [17]: s.save()  
    
    # 改多条
    In [10]: Student.objects.all().update(sex=0)                                                           
    Out[10]: 2
    
    ```
    
    ### 查
    
    ```
    # 查所有
    In [2]: Student.objects.all()                                                                          
    Out[2]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>
    # 查一条
    In [3]: Student.objects.get(pk=1)                                                                    
    Out[3]: <Student: 心蓝>
    # get 返回的是对象 如果返回了多值就会报错
    # 带条件
    In [8]: res = Student.objects.filter(sex=1)  # where sex=1                                                           
    In [9]: res                                                                                            
    Out[9]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>

    选择大于努力 ,完结--------

  • 相关阅读:
    版本控制-搭建git服务器
    借助阿里AntUI元素实现两个Web页面之间的过渡——“Loading…”
    在VS中自定义代码段
    案例研究:CopyToAsync
    与其他.Net异步模式和类型进行互操作
    使用boilerplate模版创建解决方案
    实践基于Task的异步模式
    实现基于Task的异步模式
    基于Task的异步模式的定义
    基于Task的异步模式--全面介绍
  • 原文地址:https://www.cnblogs.com/jun-1024/p/10662296.html
Copyright © 2020-2023  润新知