django模型基础

本文介绍了Django的ORM概念,详细讲解了如何配置MySQL数据库,创建并映射Django模型,以及如何进行数据的增删改查操作。通过实例展示了模型字段的定义,如CharField、SmallIntegerField和DateTimeField等,以及相关参数的使用。文章还强调了模型到数据库的映射规则,以及在执行迁移过程中涉及的步骤和SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. django的ORM

ORM : 对象关系映射, 用python的概念表达数据库

2. 数据库配置(MySQL)

  • 安装pymysql在这里插入图片描述
pip install pymysql -i https://pypi.doubanio.com/simple
  • 修改项目目录下的__init__.py
    在这里插入图片描述
    如果同步不过来将项目关闭再打开就会自动同步。
import pymysql
pymysql.install_as_MySQLdb()
  • 手动创建一个当前项目的空的数据库,准备一个有创建数据库权限的用户
    在这里插入图片描述在这里插入图片描述
  • settings 配置在这里插入图片描述

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'crm',
        'USER': 'root',
        'PASSWORD': 'qwe123',
        'HOST': '127.0.0.1',
        'PORT': '3306',

    }
}

3. 模型的创建与映射

模型

就是 django.db.models.Model 的一个子类
模型定义在app文件夹下的models.py文件在这里插入图片描述


class Student(models.Model):
    '''
    # id = models.AutoField(primary_key=True)
    # 可以省略,每一个模型(如果没有的话)django都会自动创建一个主键
    '''
    name = models.CharField(verbose_name='姓名', max_length=20)
    age = models.SmallIntegerField(verbose_name='年龄')
    sex = models.SmallIntegerField(default=1)
    qq = models.CharField(max_length=20, null=True)
    phone = models.CharField(max_length=20,null=True)
    time = models.DateTimeField(verbose_name='创建时间')
    

字段

  • models.CharField  
    字符串字段 必须设置max_length参数

  • models.SmallintegerField  
    数字   数据库中的字段有:tinyint、smallint、int、bigint

  • models.DateTimeField  
    日期时间类型 datetime   
    auto_now:保存时自动设置该字段为现在日期,最后修改日期
    auto_now_add:当该对象第一次被创建时自动设置该字段为现在日期,创建日期。

参数

  • max_length
    字段的最大字符数,作用于数据库层级和 Django 的数据验证层级。

  • verbose_name  
    Admin中字段的显示名称,如果不设置该参数时,则与属性名。

  • default
    默认值

  • null
    如果是True,Django会在数据库中将此字段的值置为NULL,默认值是False

激活映射

  • 注册应用 (模型依赖注册,必须注册)在这里插入图片描述

  • 创建迁移(在根目录下执行) 只是告诉django,我们修改了模型,它不会操作数据库

    
    python manage.py makemigrations appname
    注:如果不加app名就代表迁移所有的已注册的的app
    

在这里插入图片描述在这里插入图片描述
如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看它大概会执行什么sql语句

 python manage.py sqlmigrate appname number
 

在这里插入图片描述

  • 执行迁移 操作数据库,将对模型的改动应用到数据库(底层就是执行了sql)
    注:如果不加app名就代表执行所有的已注册的的app没有执行的迁移

python manage.py migrate appname

在这里插入图片描述
模型映射到数据库中是一张表 ,表名 = appname_模型name (小写)
在这里插入图片描述在这里插入图片描述

执行上面的命令,到底干了些什么?

  • 在app中查找迁移文件,并且去django_migrations表中查找,如果有没有执行的迁移文件,就去执行它

  • 执行了迁移生成的sql语句

  • 如果成功,会在django_migrations表中增加一条记录
    在这里插入图片描述在这里插入图片描述
    一旦需改了模型就要先创建迁移然后在执行迁移
    在这里插入图片描述在这里插入图片描述

4. 简单的数据的增删改查

django调试环境(跟普通的python解释器没有任何的区别,只不过是把当前django项目需要的环境变量自动的加载到python解释器里来,就可以在解释器里非常方便的导入django的app的包)

python manage.py shell

在这里插入图片描述
在这里插入图片描述

第一种方式


In [2]: from teacher.models import Student                                      

In [3]: s = Student()                                                           

In [4]: s.name = '小明'                                                         

In [5]: s.age = 18                                                              

In [6]: s.save() # save之后才会写到数据库                                                               

In [7]: student.object.all()   # 查表里有多少条数据

在这里插入图片描述
在这里插入图片描述

第二种方式

 stu = Student.objects.create(name='小华', age=16)  # 直接创建
    

在这里插入图片描述在这里插入图片描述


 s.delete()    
                                                          
 (1, {'teacher.Student': 1})

在这里插入图片描述在这里插入图片描述
删多条

In [14]: Student.objects.filter(sex=1).delete()                                 
Out[14]: (1, {'teacher.Student': 1})

在这里插入图片描述在这里插入图片描述

改一条


In [15]: stu.age                                                                
Out[15]: 16

In [16]: stu.age = 19      
                                                     
In [18]: stu.save()  # 改完之后要save才会写到数据库                                                           

在这里插入图片描述在这里插入图片描述
改多条


In [9]: In [8]: Student.objects.all().update(sex=0)                             
                                                               
Out[9]: 2

在这里插入图片描述
在这里插入图片描述
带条件改在这里插入图片描述在这里插入图片描述

查所有


In [3]: Student.objects.all()                                                   
Out[3]: <QuerySet [<Student: 小华>]>

在这里插入图片描述
查一条


In [7]: Student.objects.get(pk=2)      #pk是主键                                         
Out[7]: <Student: 小华>

#get返回的是对象 如果返回了多值就会报错

在这里插入图片描述

带条件


In [10]: Student.objects.filter(sex=1,name='小华')
                              
Out[10]: <QuerySet [<Student: 小华>]>

In [8]: res = Student.objects.filter(sex=1,name='小华')   # where sex=1                       

In [9]: res                                                                     
Out[9]: <QuerySet [<Student: 小华>]>



在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值