• orm


    ORM

     

    一 ORM简介

    (1) 询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装

    (2) MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要 依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动

    (3)ORM是 '对象—关系—映射'的简称。

    ORM可以做的事情:

    复制代码
    1 创建表,修改表,删除表
    
    2 插入数据
    
    3 修改数据
    
    4 删除数据
    
    不能干: 不能创建数据库
    
    
    类名 ------->表
    
    对象--------->一条数据
    
    属性----------> 字段
    复制代码

    二 使用pymysql步骤:

    (1) 创建数据库(ORM不能创建数据库)

    (2)在setting 里配置

    复制代码
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'lqz',
            '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
    '''
    复制代码

    (3) 在app的 __init__.py 文件里写上:

    import pymysql
    pymysql.install_as_MySQLdb()
    
    '''

    (4) 在models里定义类,类必须继承models.Model

    (5)写属性,对应着数据库的字段

    复制代码
    创建名为app01的app,在app01下的model.py中创建模型
    
    from django.db import models
    
    class UserInfo(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        password = models.CharField(max_length=32,null=True)
        # default='' 默认值
        # null= True 自断可以为空
        gender = models.IntegerField()
        birthday = models.DateField()
        def __str__(self):
            return self.name
        
    
    //增加和删除字段
    删除,直接注释掉字段,执行数据库迁移命令即可
    新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,此时需要设置
    publish = models.CharField(max_length=12,default='人民出版社',null=True)
    复制代码

    (6) 执行 python3 manage.py makemigrations (相当于做一个记录)

    (7)执行 python3 manage.py migrate(会把记录执行到数据库)

    创建出来的表名是: app的名字_类名

    复制代码
    最后通过以上两条数据库迁移命令即可在指定的数据库中创建表
    
    #注意:
    1 数据库迁移记录都在 app01下的migrations里
    2 使用showmigrations命令可以查看没有执行migrate的文件
    3 makemigrations是生成一个文件,migrate是将更改提交到数据量
    复制代码

    三 添加表记录

    复制代码
    views视图层
    from django.shortcuts import render,HttpResponse
    from app01.models import *
    
    def register(request):
        if request.methods == 'POST':
            name = request.POST.get('name')
            password = request.POST.get('password')
            gender = request.POST.get('gender')
            gender = request.POST.get('birthday')
            #第一种方式
            user = UserInfo(birthday=birthday,name=name,password=password,gender=gender)
            user.save()
            #第二种方式(推荐这种) 创建成功,会返回一个对象
            user = UserInfo.object.create(birthday=birthday,name=name,password=password,gender=gender)
            print(user)
            return HttpResponse('注册成功')
        
    
    def user_list(request):
        # 把数据表里用户全拿出来  
        user_list = UserInfo.object.all() #all():查询所有结果
        
        print(type(user_list)) #类
        print(user_list[0].name) #表里面的每条数据相当于一个对象 可以.访问对象属性
        print(user_list[0].password)
        return render(request,'user_list',{'user_list':user_list})
  • 相关阅读:
    事件优先权hdu1873(看病要排队)
    项目包ExpressJS入门指南
    按钮页面ActivityGroup实现Tab效果
    分割范围Codeforces Round #181 (Div. 2)
    随机伪随机随机数字
    数组最小剑指Offer读书笔记之第五章优化时间空间效率
    列字段通用excel导入修改版
    图片区域帧差法识别物体_matlab
    宋体关闭完美退出应用程序
    生成树最小生成树poj 1258 prim
  • 原文地址:https://www.cnblogs.com/zhou892232/p/9762646.html
Copyright © 2020-2023  润新知