zoukankan      html  css  js  c++  java
  • 06_django的模型系统的基本使用

    1. 配置django使用MySQL数据库

    1. 在项目要目录下修改settings.py
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',       # 要使用的数据库类型
            'NAME': 'crm',          # 使用的数据库名称
            'UsER': 'root',         # 数据库用户
            'PASSWORD': 'qwe123',   # 数据库密码
            'HOST': '127.0.0.1',    # ip
            'PORT': 3306            # 端口
        }
    }
    
    1. 修改(编辑)项目文件夹(和settings.py 文件所在的目录)下的__init__.py 文件
    # 写上下面的两句话    # 环境中要先安装pymysql   pip install pymysql
    import pymysql
    pymysql.install_as_MySQLdb()
    

    2. 模型的创建和激活

    1. 创建 app目录下的models.py
    from django.db import models
    # 一个模型类对应数据库中的一张表, 类属性代表表中的字段
    class Students(models.Model):    # 每个模型都是 django.db.models.Model 的子类
        name = models.CharField(max_length=16)   # 类属性
        age = models.SmallIntegerField(default=0)   # 年龄  默认 0 即 没有填写
        sex = models.SmallIntegerField(default=1)   # 性别, 默认为1 即 男
        qq = models.CharField(max_length=20, default='')
        phone = models.CharField(max_length=20, default='')  # 默认 = '' 空, 没有填写的
        create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)   # 创建时间
        update_time = models.DateTimeField(verbose_name='更新时间', auto_now=True)
    
        def __str__(self):
            return 'name: %s, age: %s, sex: %s' % (self.name, self.age, self.sex)
    
    
    1. 激活
       2. 运行数据库迁移命令[可以指定哪个app要进行数据库迁移命令]: python manage.py makemigrations [app_name]
       3. 执行迁移: python manage.py migrate  [app_name]    # python manage.py sqlmigrate [app_name] 0001 查看sql语句
    

    3. 使用 (对数据库中表的增删改查)

    1. 在view.py视图函数中使用
    from django.http import HttpResponse
    from .models import Students   # 导入创建的模型类
    
    def add(request):
        """向表中添加数据"""
        # 方法一: 
        long1 = Students(name='long', age=18)
        long1.save()
    
        # 方法二    与方法一算同一个方法
        long2 = Students()
        long2.name = 'long2'
        long2.save()
    
        # 方法三
        Students.objects.create(name='long3', age=20)    # 不管有没有这条数据都会增加
        # 方法四
        Students.objects.get_or_create(name='long4')  # 先从数据库中查找这条数据,如果没有则增加,如果有则不增加
        
        return HttpResponse('add添加数据')
    
    
    def select(request):
        """向表中查找数据"""
        #  1. 模型类.object.get()   # 只能查找一条数据,如果有多条数据满足,则会报错
        res = Students.objects.get(id=2)   # Students.objects.get(pk=2)   如果不确定id是主键,可以用pk 代替, pk 一定是
    
        # 2. 模型类.objects.filter()  查找满足条件的所有数据, 如果不写条件, 则默认查找所有数据,与 模型类.objects.all() 作用一样
        res2 = Students.objects.filter(age=18)  # 查找 age = 18 的所有数据
    
        # 3. 模型类.objects.all()    # 查找所有数据
        res3 = Students.objects.all()
    
        return HttpResponse('select 查看数据')
    
    
    def update(request):
        """修改 更新数据"""
        # 把需要更新的数据查找出来
        res = Students.objects.get(id=3)   # 查找出需要更新的这一条数据
        res.name = 'new_name'   # 修改name
        res.age = 23
        res.save()  # 保存更新
    
        # 修改多个
        # 把 age = 18 的数据全部更新为 name = 'longdongcheng', age = 22
        Students.objects.filter(age=18).update(name='longdongcheng', age=22)
    
        # 把 表中所有数据的 name 修改为 yanyan
        Students.objects.all().update(name='yanyan')
        return HttpResponse('update 更新数据')
    
    
    def delete(request):
        # 也是把需要删除的数据先查询出来
        Students.objects.get(id=1).delete()   # 删除id=1 的一条数据
        Students.objects.filter(age=0).delete()  # 删除 age=0 的所有数据
        Students.objects.all().delete()   # 删除表中的所有数据
        return HttpResponse('delete 删除表中的数据')
    
    1. 在 python manage.py shell 中使用 # 建议中用ipython,如果安装了ipython, 则默认会使用ipython进入 (# 与在视图中的使用是一模一样的)
    (django2.1) pyvip@VIP:~/django_code/orm_model$ python manage.py shell
    Python 3.6.6 (default, Sep 12 2018, 18:26:19) 
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: from test_model.models import Students 
    
        ### 1. 增加数据                                  
    In [2]: long = Students(name='long', age=18)  
    In [3]: long.save()  # 方法一增加一条数据                                                                                                                       
    In [5]: long2 = Students()
    In [6]: long2.name = 'long2'
    In [7]: long2.age = 19                                                         
    In [8]: long2.save()    # 方法二增加数据, 相当于也是方法一,只是先实例了一下                    
    
    In [9]: Students.objects.create(name='long3', age=20)   # 方法三增加数据,增加并返回这条数据
    Out[9]: <Students: id: 14, name: long3, age: 20, sex: 1>
    
    In [17]: Students.objects.get_or_create(name='long')   # 先查询这条数据,如果找到,则不创建,False
    Out[17]: (<Students: id: 12, name: long, age: 18, sex: 1>, False)
    In [18]: res = Students.objects.get_or_create(name='long4')  # True, 这条数据在表中不存在,创建
    In [19]: res 
    Out[19]: (<Students: id: 17, name: long4, age: 0, sex: 1>, True)
    
    
    ### 2. 查询数据
    # 1. .objects.all() 查询表中的所有数据
    In [20]: res = Students.objects.all()                                          
    In [21]: for i in res: 
        ...:     print(i) 
        ...:                                                                          
    id: 12, name: long, age: 18, sex: 1
    id: 13, name: long2, age: 19, sex: 1
    id: 14, name: long3, age: 20, sex: 1
    id: 15, name: long3, age: 20, sex: 1
    id: 16, name: long3, age: 20, sex: 1
    id: 17, name: long4, age: 0, sex: 1
    
    In [22]:         
    
    # 2. .objects.get()   # 查询一条数据, (没有, 有多个匹配都会报错)
    In [25]: Students.objects.get(id=12)                                   
    Out[25]: <Students: id: 12, name: long, age: 18, sex: 1>
    
    # 3. .objects.filter()  # 查询所有满足条件的数据
    In [26]: Students.objects.filter(age=18)
    Out[26]: <QuerySet [<Students: id: 12, name: long, age: 18, sex: 1>]>
    # filter不写条件就与.all() 一样,查询所有的数据
    In [30]: res = Students.objects.filter()                                       
    In [31]: for i in res: 
        ...:     print(i) 
        ...:                                                                        
    id: 12, name: long, age: 18, sex: 1
    id: 13, name: long2, age: 19, sex: 1
    id: 14, name: long3, age: 20, sex: 1
    id: 15, name: long3, age: 20, sex: 1
    id: 16, name: long3, age: 20, sex: 1
    id: 17, name: long4, age: 0, sex: 1
    
    In [32]:     
    
  • 相关阅读:
    Spring 事务回滚机制详解
    【Azure 媒体服务】在Azure Media Service门户中使用HLS模式传输视频流,播放视频步骤
    【Azure 媒体服务】记录一个简单的媒体视频上传到Media Service无法播放问题
    【Azure 媒体服务】Azure Media Service Explorer 5.4.3.0 不能连接Media Service, 错误消息提示 BadRequest 和 Forbidden
    【Azure 应用服务】VS2019发布应用到正在运行的App Service时失败问题的解决
    【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
    【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理
    【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
    【Azure 应用服务】如何定期自动重启 Azure App Service Plan(应用服务计划)
    【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
  • 原文地址:https://www.cnblogs.com/nichengshishaonian/p/11091002.html
Copyright © 2011-2022 走看看