1.Django的ORM
ORM 对象关系映射.
2.数据库配置(MySQL)
在虚拟机安装pymysql
pip install pymyqsl -i https://pypi.doubanio.com/simple
2.修改项目目录下的__init__.py
3.手动创建一个当前项目的数据库,准备一个有创建数据库权限的用户
4.到setting里设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm', # 数据库名
'USER': 'admin', # 设置你的用户
'PASSWORD': 'Root110qwe', # 设置你的密码
'HOST': '127.0.0.1', # 设置你的本机地址
'PORT': '3306' # 设置你mysql的端口
}
}
3.模型的创建与映射
模型
就是django.db.models.Model 的一个子类。
模型定义在app文件夹下的models.py文件定义好字段
class Student(models.Model):
name = models.CharField(verbose_name='姓名', max_length=20)
age = models.SmallIntegerField(verbose_name='年龄', null=True)
sex = models.SmallIntegerField(default=1)
qq = models.CharField(max_length=20, null=True)
phone = models.CharField(max_length=20, null=True)
c_time = models.DateTimeField(verbose_name='创建时间')
激活模型
1.注册应用 模型必须注册
2.创建迁移(只是告诉django,我么修改了模型,它不会操作数据库) 如果对数据库有任何的改变就必须要迁移
在根目录下执行
python manage.py makemigrations appname
3.如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看他大概会执行什么sql语句
python manage.py sqlmigrate teacher 0001
4.执行迁移 操作数据库,将对模型的改动应用到数据库(地城就是执行了SQL语句)
python manage.py migrate appname
此刻可以看到数据库里面有了表名
查看teacher_student表
模型映射到数据库中是一张表,表名= appname_模型name 小写
执行上面的命令,做了一下一个事情:
a.在app中去查找迁移文件,并且去django_mirgrations表中查找,如果有没有执行的迁移文件,就去执行这个没有被执行的迁移文件
b.执行了迁移生成的sql语句
c.如果成功,会在django_migrations表中增加一条记录
查看迁移记录
4.简单的数据库增删改查
模型的类代表一个数据表
模型的一个实例代表一条数据
进入django调试环境
python manage.py shell
from teacher.models import Student # 导入
Student.objects.all() # 查看表中所有的数据
增加
# 第一种方式
s = Student() # 实例化
s.name = '张三'
s.age = 'age'
s.save() # 创建了一条实例 必须主动的去保存一下
第二种方式
stu = Student.objects.create(name='李四', age=18) # 自动保存
<Student: Student object (2)>
删除
stu.delete()
(1, {'teacher.Student': 1})
修改
# 修改一条
stu = Student.objects.create(name='赵六', age=25) # 先添加一条数据
stu.age = 19
stu.save()
# 修改多条数据
Student.objects.all().update(sex=0)
Student.objects.filter(age__gt=10).update(sex=1) # 把大于年龄大于十岁的人的性别改成1
Student.objects.filter(sex=1).delete() # 把所有性别等于的数据删除掉
3, {'teacher.Student': 3})
查询
# 查所有
Student.objects.all() 返回的是一个QuerySet对象
stu = Student.objects.all() 用一个stu变量保存一下
print(stu.query)
SELECT `teacher_student`.`id`, `teacher_student`.`name`, `teacher_student`.`age`, `teacher_student`.`sex`, `teacher_student`.`qq`, `teacher_student`.`phone`, `teacher_student`.`c_time` FROM `teacher_student` # 返回的是一个sql语句
在模型中定义一个__str__()方法
def __str__(self): return self.name # 当每次打印模型对象的时候,会返回这个属性name的值
# 查询一条数据
Student.objects.get(pk=1)
<Student: 张三>
# get 返回的是对象 如果返回了多值就会报错# 带一个条件查询
Student.objects.filter(sex=1)
<QuerySet [<Student: 张三>, <Student: 李四>, <Student: 赵六>]>
# 查看一下带条件查询的slq语句
# 带多条件查询
Student.objects.filter(sex=1, name='赵六')
<QuerySet [<Student: 赵六>]>
# 查看一下带多条件查询的slq语句