开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第35天,点击查看活动详情
六,模型基础
一,数据库连接配置
1),安装
安转pymysql,进入到对应的虚拟环境pip install pymysql
2),创建:创建数据库
-
创建数据库用户
-
创建库:
create database 库名; -
配置:在setting中配置mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'CRM', # 数据库名(Mysql里创建的) 'USER': 'root', # 用户名 'PASSWORD': 'qwe123', # 密码 'HOST': '127.0.0.1', # IP 'PORT': '3306' # 端口(虚拟机别忘记端口转发) } } -
导入:在根目录下的
__init__.py文件下导入pymysqlimport pymysql pymysql.install_as_MySQLdb()
二,Django的ORM简介
ORM:对象关系映射(Object Relational Mapping)简单来说,就会用面向对象的方式,达到不用编写Sql语句就能对数据库进行操作(描述数据库,增删改查数据库)
数据库 --------> Django
表 ---------> 类
字段 --------> 类属性
一行数据 --------> 一个实例
三,模型的创建和映射
1),创建模型
在对应的App下的models.py创建模型(类)
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=20) # 创建varchar的类
age = models.SmallIntegerField() # 创建tinyint字段的类
sex = models.SmallIntegerField(default=1) # 设置默认值
qq = models.CharField(max_length=20)
phone = models.CharField(max_length=20)
cre_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
# verbose_name可以设置成一个人类认识的字段名,auto_now_add自动填充当前时间
2),激活模型
-
注册:在项目的setting.py中注册App
还有一种写法是
-
迁移(未生效):
python manage.py makemigrations全部模型都迁移 作用:告诉Django,我们做了哪些数据库的更改
python manage.py makemigrations app名指定App下的模型迁移迁移:是django对模型的更改方式,它是一个文件,把我们设置的文件保存下来了,但是在数据库里面还没生效还没生效
python manage.py sqlmigrate student 0001查看原生sql语句 -
迁移生效
运行migrate命令,使迁移生效:
python manage.py migrate或者python manage.py migrate student表名:appname_模型名
3),总结
- 更改模型(App下的models.py有修改)
- 生成迁移:
python manage.py makemigrations - 迁移生效:
python manage.py migrate
四,数据库的增删改查
准备工作:
-
进入虚拟环境安转:
pip install ipython -
进入django shell调试工具:
python manage.py shell -
常用的三个操作(导入模型,查看对象,查看数据)
-
增
-
第一种创建方法(变量)
-
第二种创建方法(类实例)
-
第三种创建方法(create方法,不需要save)
-
第四种创建方法(先查,如果没有创建,返回True)
-
-
查(all,get,flilter)
- 查询全部(all)
- 指定查询,单个(get)
- 条件查询,多个(filter)
- 查询全部(all)
-
删(delete)
- 删除单个
- 删除多个
- 删除所有
- 删除单个
-
改
- 修改一条
- 修改多条
- 修改一条
五,在模板里面使用数据库数据
1,视图文件设置(views.py)
from student.models import Imforation
data = Imforation.objects.all()
context={'data': data}
2,模板设置(html文件)
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>qq</th>
<th>时间</th>
</tr>
{% for aaa in data %}
<tr>
<td>{{ forloop.counter }}</td>
<td><a href="{% url 'student:detail' aaa.name %}">{{ aaa.name }}</a></td>
<td>{{ aaa.age }}</td>
<td>{{ aaa.sex|to_sex:'zh' }}</td>
<td>{{ aaa.qq }}</td>
<td>{{ aaa.cre_time }}</td>
</tr>
{% endfor %}
<td>{{ aaa.age }}</td>
<td>{{ aaa.sex|to_sex:'zh' }}</td>
<td>{{ aaa.qq }}</td>
<td>{{ aaa.cre_time }}</td>
</tr>
{% endfor %}