zoukankan      html  css  js  c++  java
  • Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

    Django

    1. Django的ORM简介
    2. 数据库连接配置
    3. 模型的创建与映射
    4. Django之Model字段详解
    5. 数据库的增删改查
      1. 增数据
      2. 查数据及补充
      3. 改数据
      4. 删数据

     

     

    Django的ORM系统分析

    1. ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
    2. ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

    Django的模型映射关系

    • 模型类必须都写在app下的models.py文件中。
    • 模型如果需要映射到数据库,所在的app必须被安装.
    • 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

     

    数据库的配置

     在项目的settings文件中的DATABASES

    注意:NAME是数据库的库名,在使用之前,需要先在数据库中新建一个对应名字的database

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.msyql',
            'NAME': database_name,
            'USER': username,
            'PASSWORD': password,
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }
    •  创建一个管理员用户pywjh账号,密码为 pywjh:CREATE USER 'pywjh'@'%'IDENTIFIED BY 'pywjh';
    • 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
      • GRANT ALL ON *.* TO 'pywjh'@'%';
    • 使授权立即生效:FLUSH PRIVILEGES;

    pymsql数据库连接器的配置

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

    import pymysql
    pymysql.install_as_MySQLdb()



    使用Django中的模型

     首先,在哪个APP下创建模型,都要先在settings中注册APP

    APP  my_sql下的models.py

    from django.db import models
    
    
    # Create your models here.
    class User(models.Model):
        id = models.AutoField(primary_key=True) # id属性,不用添加Django也会自动添加
        name = models.CharField(max_length=10)
        age = models.IntegerField()
    
        def __str__(self):   # 定义输出方法,在查询的时候使用
            return 'User<id=%s, name=%s, age=%s>'%(
                self.id, self.name, self.age
            )
     然后在创建映射文件:( 后面可以跟APP的名字,不跟则表示全部都映射)
    python manage.py makemigrations [app_name]

    将映射数据提交到数据库中:

    python manage.py migrate [app_name]

     这是就会在数据库中看到自己创建的模型

    打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
    注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.


     

     数据库的增删改查

    增:

     配置到url后,在视图views中:

    from django.http import HttpResponse
    from .models import User
    
    def add(request):
        # # 方法一
        # user = User()
        # user.name = '张三'
        # user.age = 22
        # user.save()
        # # 方法二
        # user = User(name='李四', age=23).save()
        # # 方法三
        # User.objects.create(name='王五', age=22)
        # 方法四
        User.objects.get_or_create(name='周六', age=24) # 这个方法不会重复添加
    
        return HttpResponse('添加数据成功')

     检查数据库:

    查:

    views中:

    查看全部数据

    from django.http import HttpResponse
    from .models import User
    
    def get(request):
        # 获取全部数据
        result = User.objects.all()
        print(result)
        return HttpResponse('查询数据成功')

    User.objects.all()——后台输出:

    查询一个数据:

    def get(request):
        # 查村一个数据
        result = User.objects.get(id=1)
        print(result)
    
        return HttpResponse('查询数据成功')

     

    查询满足条件的数据:

    def get(request):
        # 查询满足条件的数据
        result = User.objects.filter(name='王五')
        print(result)
    
        return HttpResponse('查询数据成功')

     

    注意:

    • 通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.
    • all()和filter()方法返回的是QuerySet对象.
    • get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
    • 1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
    • 2.QuerySet是可迭代对象.
    • 3.QuerySet支持切片, 不支持负索引.
    • 4.可以用list强行将QuerySet变成列表.

    补充:

    获取一个属性的搜索数据:

    def get(request):
        # 单独获取一个属性的全部数据
        result = User.objects.values('age')
        print(result)
    
        return HttpResponse('查询数据成功')

    去重:

    def get(request):
        # 单独获取一个属性的全部数据,并去重
        result = User.objects.values('age').distinct()
        print(result)
    
        return HttpResponse('查询数据成功')

    改:

    在操作之前,先在models中在添加一个city的属性,规定模型添加属性要加上默认值,不要忘记创建映射文件已经映射数据

    from django.db import models
    
    
    # Create your models here.
    class User(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=10)
        age = models.IntegerField()
        city = models.CharField(max_length=20, default='北京')
    
        def __str__(self):
            return 'User<id=%s, name=%s, age=%s>'%(
                self.id, self.name, self.age
            )

    映射文件以后再查看数据库:

    views:

    def update(request):
        # 先查找到数据在进行修改
        res = User.objects.get(name='张三')
        res.city = '武汉'
        res.save()
        # 用update直接修改 # update针对的是QuerySet类型的数据
        User.objects.filter(name='李四').update(city='重庆')
        return HttpResponse(' 数据修改成功')

     

    删:

    所有的方法都是用与delete方法

    def delete(request):
        result = User.objects.get(id=1)
        result.delete()
    
        User.objects.filter(name='周六').delete()
        return HttpResponse('删除数据成功')

     

  • 相关阅读:
    Winforms界面开发技巧:解决旧UI要求的新方法
    Kendo UI for jQuery数据管理使用教程:PDF导出(二)
    WPF界面开发——格式化通过CellToolTipBinding定义的工具提示值
    Winforms 2020界面开发新纪元——Map、Pivot Grid控件升级
    Web开发实用技能,看Kendo UI for jQuery如何PDF导出(一)
    DevExpress Winforms界面开发,带你了解Visual Studio Palette Editor!
    界面控件DevExpress 7月版本已更新,重要更改看这里!
    WPF界面开发必看功能——Splash Screen Manager
    Web开发实用技能,看Kendo UI for jQuery如何导出Excel(二)
    redis 应用场景
  • 原文地址:https://www.cnblogs.com/pywjh/p/10179014.html
Copyright © 2011-2022 走看看