zoukankan      html  css  js  c++  java
  • Django——orm概述及在django中使用

    一、orm概述

    1 orm:对象关系映射(跟语言无关)
            数据库中的表     ----》对应程序的一个类
            数据库中的一行数据----》对应程序中的一个对象
    2 python中常见orm框架
        -django的orm框架
        -sqlachemy orm框架
        
    3 java:(扩展),java中写web项目
        ssh框架 :spring+struts(有漏洞)+hibernate(orm框架) (10年前用的多,现在已经弃用,有些国企还在用)
        ssm框架:spring+springmvc+mybatis(orm框架,可以写原生sql)
        springboot:sb框架 ,已经整合了,把tomcat内置进去了
        springcloud:微服务
    4 orm能干的事
        -创建表(不能创建数据库,手动创建数据库)
        -增加删除表内字段
        -增删查改数据

     如果操作mysql,ORM是在pymysq之上又进行了一层封装

    二、django中orm的使用

    0 sqlite:也是要给数据库,文件数据库,一个库就是要给文件,不需要单独安装
        -咱们现在在用,也要用到关系型数据库,不想装mysql,就可以使用sqlite
        -移动开发本地存储数据,存在sqlite中
    
    1 创建个UserInfo表,在models中写一个类
    2 表中有字段(类属性),字段有属性,
    
    
    # 第一步在models中写要给类
        class UserInfo(models.Model):
            # 字段属性--》后面那个对象决定的,
            # 该字段自增,并且是主键
            id = models.AutoField(primary_key=True)
            # 该字段是varchar类型,长度为32(唯一约束,是否是索引,默认值是,是否可以为空)
            name = models.CharField(max_length=32)
            # 密码字段
            #password =models.CharField(max_length=64)  #代表已删除
         
    # 增加
    #第二步,把表创建出来(执行两个命令就创建出来了)
    -python3 manage.py makemigrations # 这条命令会在migrations创建一条记录,数据库变更记录 -python3 manage.py migrate # 把更改同步到数据库
    3 增加删除字段
      
      删除字段 首先注释掉要删除的字段,再在terminal中执行第二步里的两个命令就可以了
      增加字段
    比如要增加
          #数字类型 默认 1男 2女
          gender=models.IntegerField()
          #省份
          province=models.CharField(max_length=32)
        写好后在terminal中执行那两个命令
    会出现可能之前的表里有数据,那么就需要在
          password =models.CharField(max_length=64,null=True)
          gender=models.IntegerField(default=0)
          province=models.CharField(max_length=32,null=True)

      如不想走到那一步,新增字段直接设置(default=默认值 或者 null=True)

      -两条数据库迁移命令(一个是记录,一个是真正的迁移)
      python manage.py makemigrations
      python manage.py migrate

      -插入

      方式一:
      user=UserInfo(name=lqz,age=19)
      user.save()
      方式二:
      user=UserInfo.objects.create(name=lqz,age=19)
    -查询所有
    UserInfo.objects.all() # 放到列表中[user1,user2,user3]

     参考比较:

    三、若想将模型转为mysql数据库中的表,需要在settings中配置:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'lili',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'ATOMIC_REQUEST': True,
            'OPTIONS': {
                "init_command": "SET storage_engine=MyISAM",
            }
        }
    }
    '''
    'NAME':要连接的数据库,连接前需要创建好
    'USER':连接数据库的用户名
    'PASSWORD':连接数据库的密码
    'HOST':连接主机,默认本机
    'PORT':端口 默认3306
    'ATOMIC_REQUEST': True,
    设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
    是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 
    'OPTIONS': {
                 "init_command": "SET storage_engine=MyISAM",
                }
    设置创建表的存储引擎为MyISAM,INNODB
    '''
     

    注意:

    NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库的用户名和密码。
    设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。
    这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的__init__,在里面写入:
    import pymysql pymysql.install_as_MySQLdb()
    最后通过两条数据库迁移命令即可在指定的数据库中创建表 : python manage.py makemigrations python manage.py migrate

    如果报错如下:

    "django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None"
    
    
    是因为: MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:
    
    通过查找路径C:ProgramsPythonPython36-32Libsite-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql
    这个路径里的文件把
    
    if version < (1, 3, 3):
         raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
    
    注释掉就可以了
  • 相关阅读:
    emacs 配置
    .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建
    .Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡
    .Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合
    .Net微服务实践(二)[网关]:Ocelot介绍和快速开始
    .Net微服务实践(一)[框架]:微服务框架选型
    研发协同平台持续集成之Jenkins实践
    统一身份认证服务IdentityServer4实践
    DevOps平台架构演进
    ABP框架
  • 原文地址:https://www.cnblogs.com/guojieying/p/13744746.html
Copyright © 2011-2022 走看看