Django模型系统
Django模型系统
一、django的ORM
定义:对象关系的映射(通俗讲python表达数据库)
二、数据库配置
1、在虚拟环镜中安装pymysql
命令:pip install pymysql
2、修改项目目录下的__init__.py文件
import pymysql
pymysql.install_as_MySQLdb()
3、手动用命令创建一个数据库,也可以用工具(Navicat For MySQL)软件创建一个数据库
4、配置settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm', #创建好的数据库名称
'USER': 'root', #用户名
'PASSWORD': 'qw123', #密码
'HOST': '127.0.0.1', #IP地址
'PORT': '3306' #端口
}
三、模型的创建与映射
模型:就是django.db.models的一个子类
模型类->数据表;类属性->表字段名
模型类必须都写在app目录下models.py文件中
1、创建一个模型 ,例:
class Student(models.Model):
name = models.CharField(verbose_name='姓名', max_length=20)
age = models.SmallIntegerField(verbose_name='年龄',null=True)
sex = models.SmallIntegerField(default=1) #表示默认就是1
QQ = models.CharField(max_length=20,null=True)
phone = models.CharField(max_length=20, null=True)
c_time = models.DateTimeField(verbose_name='创建时间')
模型类代表了一个数据库中的一个表
2、激活模型
2.1 注册应用(非常重用)
2.2 创建迁移(只是告诉django,我们修改了模型,它不操作数据库)
命令:python manage.py makemigrations appname(如果app名不加,表示迁移所有的)
例:python manage.py makemigrations
# 如果我们想看,我们的更改会对数据库产生什么影响
命令:python manage.py sqlmigrate teacher 0001
2.3 执行迁移(操作数据库,将对模型的改动应用到数据库)
命令:python manage.py migrate appname (如果app名不加,会把所有app下的改动映射到数据库)
例:python manage.py migrate teacher
模型映射到数据库中是一张表,表名=appname_模型类name(是小写)
注:如果修改了模型,必须要重新(创建迁移),然后在(执行迁移)
四、简单的数据的增、删、改、查
1、增:
第一种方式如下:
In [1]: from teacher.models import Student
In [2]: s=Student()
In [3]: s.name='沈毅'
In [4]: s.age=18
In [5]: s.sex='男'
In [6]: s.save()
注:一定保存,才会写入数据库
第二种方式如下:
stu=Student.objects.create(name='小李',age=18)
注:直接创建
-------------------------------------------------------------------------------
2、删:
In [13]: stu.delete()
Out[13]: (1, {'teacher.Student': 1})
删除所有的记录:
In [13]: Student.objects.all().delete()
根据条件删除记录:
In [13]: Student.objects.filter(age=18).delete()
-------------------------------------------------------------------------------
3、改:
In [14]: stu=Student.objects.create(name='小李',age=18)
In [15]: stu.age=16
In [16]: stu.save()
根据条件,修改数据
In [11]: Student.objects.filter(name='小李').update(sex=2)
------------------------------------------------------------------------------
4、查:
第一种 查一条记录:
In [6]: Student.objects.get(pk=1)
Out[6]: <Student: 沈毅>
注:get返回的是对象,如果返回了多值就会报错,比如pk=2,那就会报错
第二种 查所有记录:
In [3]: Student.objects.all()
Out[3]: <QuerySet [<Student: 沈毅>, <Student: 小李>]>
第三种 带条件查记录:
In [13]: Student.objects.filter(sex=2)
Out[13]: <QuerySet [<Student: 小李>]>