• Django---ORM框架


    一、get请求和post请求

    GET请求:

    1. 浏览器请求一个页面
    2. 搜索引擎检索关键字的时候

    POST请求:
    1. 浏览器向服务端提交数据,比如登录/注册等

    HTTP中GET与POST的区别

    http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml

    二 、 Django中的APP:

    什么是APP?以及为什么要用APP?

    project --> 项目 

    APP --> 应用 

    方便我们在一个大的Django项目中,管理实现不同的业务功能.

    1. 创建APP的命令
    1. 命令行,在Django项目的根目录输入:
    python3 manage.py startapp app名字

    三 、 ORM框架

    一、ORM简介 
            对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 
            这种方案存在以下不足: 
            1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口 
            2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。 

            ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 
            ORM的方法论基于三个核心原则: 
      · 简单:以最基本的形式建模数据。 
      · 传达性:数据库结构被任何人都能理解的语言文档化。 
      · 精确性:基于数据模型创建正确标准化了的结构。 

    二、ORM的概念 
            让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 
            当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。 

            ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。 
            ORM技术特点: 
            1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 
            2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。 

    三、ORM的优缺点 
            ORM的缺点是会牺牲程序的执行效率和会固定思维模式。 
            从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。 

            在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 
            在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。 
            但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。

    ORM的对应关系:
    类 ---> 数据表
    对象 ---> 数据行
    属性 ---> 字段

    ORM能做的事儿:
    1. 操作数据表 --> 创建表/删除表/修改表
    操作models.py里面的类

    2. 操作数据行 --> 数据的增删改查


    不能创建数据库,自己动手创建数据库

    使用Django的ORM详细步骤:
      1. 自己动手创建数据库
      create database 数据库名;
      2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
      # 数据库相关的配置
      DATABASES = {
      'default': {
      'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
      'HOST': '127.0.0.1', # 连接数据库的地址
      'PORT': 3306, # 端口
      'NAME': "day61", # 数据库名称
      'USER': 'root', # 用户
      'PASSWORD': '123456' # 密码
      }
    }
      3. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库
      在项目/__init__.py文件中,写下面两句:
      import pymysql
      # 告诉Django用pymysql来代替默认的MySQLdb
      pymysql.install_as_MySQLdb()
      4. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model
      class 类名(models.Model):
      ...
      5. 执行两个命令
      1. python3 manage.py makemigrations
      2. python3 manage.py migrate


      ORM单表的增加和查询:
      1. 查询
      models.UserInfo.objects.all()

      2. 增加
      models.UserInfo.objects.create(name="张三")

     一、创建表

    1.  自己动手创建数据库

    create database day61<br>create table userinfo(id int auto_increment primary key varchar(10) not null ,pwd varchar(18) not null
    

    2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)

    # 数据库相关的配置
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
    'HOST': '127.0.0.1', # 连接数据库的地址
    'PORT': 3306, # 端口
    'NAME': "day61", # 数据库名称
    'USER': 'root', # 用户
    'PASSWORD': '123456' # 密码
    }
    }

    在setting文件夹下做如下配置

    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.sqlite3',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    
            #连接数据库类型
            'ENGINE':'django.db.backends.mysql',
            ##连接数据库的地址
            'HOST':'127.0.0.1',
            ##数据库名称
            'NAME':'day61',
            #用户
            'USER': 'root',
            #密码 
            'PASSWORD':'123456'
    
        }
    }

    3. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库

    在_init_.py文件下写代码 

    import pymysql
    pymysql.install_as_MySQLdb()
    

    4. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model

    在module文件下添加

    from django.db import models
     
    # Create your models here.
     
    #ORM 相关的只能写在这个文件中,写到别的文件里Django找不到.
     
    class UserInfo(models.Model):
        id = models.AutoField(primary_key= True)#创建一个自增的主键字段
        name =models.CharField(null=False,max_length=32)#创建一个varchar(20)类型的不能为空的名字字段

    5. 执行两个命令

    python3 manage.py makemigrations
    python3 manage.py migrate
    

    查看表格 在mysql数据库里

    二、删除表 

     把下面的语句注释掉然后执行 那两个语句
    class UserInfo(models.Model):
        id = models.AutoField(primary_key= True)#创建一个自增的主键字段
        name =models.CharField(null=False,max_length=32)#创建一个varchar(20)类型的不能为空的名字字段
    
    1. python3 manage.py makemigrations
    2. python3 manage.py migrate<br><span style="color: #ff0000;"><strong>记录在了小本本 里</strong></span><br><br>
    

    三、改表

    修改class userinfo 的代码在执行两个指令

    四、添加数据

    五、表单操作之列表展示

    在django project中url里添加数据

    from app01 import views
     
     
    urlpatterns=[
        # url(r'^yimi/',yimi),
        # url(r'^xiaohei/',xiaohei),
        url(r'^index/',views.index),
        # url(r'^user_list/',user_list)
        url(r'^user_list/',views.user_list)
    ]
    

    在app01的views 里添加

    from django.shortcuts import HttpResponse, render
    from app01 import  models
    def user_list(request):
        #去数据库中查询所有的用户
        #利用orm这个工具去查询数据库,不用自己去查询
    <strong>    ret = models.UserInfo.objects.all()
    </strong>    print(ret[0].id,ret[0].name)
        #打开user_list.html文件
        return render(request,'user_list.html',{'user_list':ret})
    

    在建一个html文件 

    展示 

  • 相关阅读:
    设置函数环境——setfenv(转)
    全局变量声明的规范化(转)
    利用__index和__newindex实现默认值表、监控表、只读表(转)
    php中的$_GET怎样获取带有井号“#”的參数
    Servlet配置load-on-startup
    LinQ—扩展方法
    CRT
    [C++] 获取IE代理server的账号password
    一步一步写算法(之hash表)
    android之PackageManager简单介绍
  • 原文地址:https://www.cnblogs.com/strive-man/p/8978014.html
Copyright © 2020-2023  润新知