django模型基础

1. django的ORM

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

2. 数据库配置(MySQL)

  • 安装pymysqldjango模型基础_第1张图片
pip install pymysql -i https://pypi.doubanio.com/simple
  • 修改项目目录下的__init__.py
    django模型基础_第2张图片
    如果同步不过来将项目关闭再打开就会自动同步。
import pymysql
pymysql.install_as_MySQLdb()
  • 手动创建一个当前项目的空的数据库,准备一个有创建数据库权限的用户
    django模型基础_第3张图片django模型基础_第4张图片
  • settings 配置django模型基础_第5张图片

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文件django模型基础_第6张图片


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模型基础_第7张图片

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

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

django模型基础_第8张图片django模型基础_第9张图片
如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看它大概会执行什么sql语句

 python manage.py sqlmigrate appname number
 

django模型基础_第10张图片

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

python manage.py migrate appname

django模型基础_第11张图片
模型映射到数据库中是一张表 ,表名 = appname_模型name (小写)
django模型基础_第12张图片django模型基础_第13张图片

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

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

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

  • 如果成功,会在django_migrations表中增加一条记录
    django模型基础_第14张图片django模型基础_第15张图片
    一旦需改了模型就要先创建迁移然后在执行迁移
    django模型基础_第16张图片django模型基础_第17张图片

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

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

python manage.py shell

django模型基础_第18张图片
django模型基础_第19张图片

第一种方式


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()   # 查表里有多少条数据

django模型基础_第20张图片
django模型基础_第21张图片

第二种方式

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

django模型基础_第22张图片django模型基础_第23张图片


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

django模型基础_第24张图片django模型基础_第25张图片
删多条

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

django模型基础_第26张图片django模型基础_第27张图片

改一条


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

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

django模型基础_第28张图片django模型基础_第29张图片
改多条


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

在这里插入图片描述
django模型基础_第30张图片
带条件改在这里插入图片描述django模型基础_第31张图片

查所有


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

django模型基础_第32张图片
查一条


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: 小华>]>



django模型基础_第33张图片

你可能感兴趣的:(django框架学习)