django连接MySQL(******)(两个关键步骤)

1.修改配置文件中DATABASES变量指代的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
将默认的数据库引擎由默认的sqlite改为mysql
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'stu_oa', ## 数据库名称
'USER': 'root',
'PASSWORD': '123', ## 安装 mysql 数据库时,输入的 root 用户的密码
'HOST': '127.0.0.1',
}
}

数据库配置

2.去__init__.py(可以是项目(project)下的也可以是应用(app)下的)文件中

1
2
import pymysql
pymysql.install_as_MySQLdb() 告诉django用pymysql模块去操作数据库

django小白必会三板斧

​ HttpReponse 返回字符串
​ render 渲染页面
​ redirect 重定向
​ ps:django返回给前端的数据都是HttpResponse对象

ORM模型层

对象关系映射

1
2
3
4
5
class User(models.Model):
# 主键字段可以不写,django会自动帮你创建一个字段名为id的主键字段
uid = models.AutoField(primary_key=True)
# name(varchar(32))
name = models.CharField(max_length=32) django默认没有类对应char类型

数据库迁移命令(******)

1
2
python3 manage.py makemigrations  将数据库更改记录添加到小本本上(对应应用下migrations文件夹)
python3 manage.py migrate 将更改同步到数据库(真正的操作数据库)

ps:上述命令记得滚瓜烂熟之后可以使用pycharm提供的简便的命令行操作

模型表字段的增删改查

​ 表没有的数据情况下,直接执行数据库迁移命令即可
​ 有数据的情况下,新增的字段需要有个默认值(default=’默认值’,null=True),然后执行数据库迁移命令

删(一般情况下是不会删除的)

执行数据库迁移命令
强调:只要你修改了与数据库表相关的记录,你就必须得从头开始执行数据库迁移命令

模型表数据的增删改查

1
2
3
4
5
6
7
8
9
10
res = models.User.objects.all()  获取user表中所有的数据,返回的是一个queryset对象(你就把它当成是一个列表里面放的是一个个的数据对象)
print(res.query) 查看当前queryset对象内部对应的sql语句
注意:只有queryset对象才可以点query方法

res = models.User.objects.filter(name='jason') 去数据库将name字段对应的值为jason所有的数据都出来
filter返回的结果是一个queryset对象
ps:queryset对象支持索引取值,但是它不支持负数索引(******)

res = models.User.objects.get(name='jason')
返回的结果就是数据对象本身,这个方法当条件不存在的情况直接报错

1
2
3
4
user_obj = models.User.objects.create(name='jason')
create方法有一个返回值,就是当前新增的数据对象本身
user_obj = models.USER(name='jason')
user_obj.save()

改(是基于已经有的数据的基础之上继续修改)

1
2
3
4
5
user_obj = models.User.objects.filter(name='jason').first()
user_obj.name = 'egon'
user_obj.save()
user_list = models.User.objects.filter(name='jason').update(name='xxx')
调用queryset封装的方法,该方法是一个批量操作,会将queryset内所有的数据对象全部修改

1
models.User.objects.filter(name='jason').delete()