4.1.ORM -Django的 模块
作用:不用去手动使用数据库的语句如(select * from xxxx),作为一个翻译的工程
4.2.安装mysqlcliet模块
可以通过命令行的方式安装:pip install mysqlclient
如果命令行的方式安装不成功,可以寻找wheel文件,再安装
4.3 ORM可以完成:
创建、修改、删除数据库的表(不用写SQL语句)【无法创建数据库】
操作表中的数据(不用写SQL语句)
(1)自行创建数据库
1.1启动mySQL服务
可参考 (https://blog.csdn.net/weixin_43696992/article/details/124182360)
1.2.创建数据库
create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
(2) Django 连接数据库 在setting.py中进行修改
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘test’, # 数据库名字
‘USER’: ‘root’,
‘PASSWORD’: ‘root’,
‘HOST’: ‘127.0.0.1’, # 哪台机器安装了MySQL
‘PORT’: 3306,
}
}
(3)通过django 操作表
- 创建表
- 删除表
- 修改表
在model.py中创建表
如下图,类中的变量就相当于是下面对应的sql语句
其中app01是因为注册的就是表面是app01_xxxxx;
再执行
python manage.py makemigrations
python manage.py migrate
就完成了数据库表的创建。
(数据库可视化软件Navicat 的激活方法 https://www.bilibili.com/video/BV12W4y1z792?spm_id_from=333.337.search-card.all.click ,破解工具在阿里云云盘)
其它的表是Django自动给我们创建的
注意:要完成创建表,对应的app一定要是已经注册****了的。
要添加表就在 models.py中添加类,再执行migrate的两个语句就行
删除表->删除对应的类
删除表内的键->删除类中的变量 (每次修改后都需要执行migrate的语句)
在已有的表中添加新的列,由于表中原有字段数据的新列的值不好赋值,所以需要注意方法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/1fe113b360164bc0aa0435a1c6ec4062.png
选择1或者2
- 将已有数据的新列的值全部赋值为1
2)先退出,自行在变量后添加default=默认值,来赋值已有数据的列的值
这里选择2:
然后设置已有数据列的值
以后在开发中如果想要对表结构进行调整:
-
在models.py文件中操作类即可。
-
命令
-
python3.9 manage.py makemigrations
python3.9 manage.py migrate
(4)通过ORM 操作表中的数据
新建数据:
直接通过 类名.objects.create(列名=“xxxxx”)
测试:通过在views.py中引用models.py的方式来进行新建数据,
新建数据的时候如果列设置了默认值,可以不为列进行自行设置数据
**删除数据:**加粗样式
filter表示将特定的条件数据删除。
获取数据
可以通过循环获取到列表的每行数据:
还可以通过filter拿到特定id的数据,然后通过first()得到第一条数据,这样就能获得一个特定id的对象,就可以直接调用:
更新数据
更新数据同样可以将全部对象列更新,也可以通过filter指定对象的列进行更新
错误解决
错误代码1:django.db.utils.ProgrammingError: (1146, “Table ‘test1.app02_userinfo’ doesn’t exist”)
问题是表不存在,其实就是数据库迁移出了问题,需要重新迁移一下。
即需要对应修改 migrations 文件夹 内容
1:删除migrations 文件夹所有除了_init_.py的文件
2:再去数据库里面,把报错对应的记录也删除
即找到数据库表django_migrations,并 删除该app名字的所有记录
即对应的app02的记录,最后再使用
python3.9 manage.py makemigrations
python3.9 manage.py migrate
命令
问题:在原有的models.py中添加新的字段,出现No migrations to apply.的情况 如下图
在Task中添加新字段NO的时候,注意运行makemigrations时,会提示由于在原定的表中添加新字段,原有的数据的这个字段就必须要有一个值,如果在models.py的这个新字段中未设置default=xx时,就会有这个提示,
如果选择2,并且没有在对应新字段上设置default=xx,直接运行migrate就会出现No migrations to apply.的情况
所以解决方法有两种:
1:输入1,为其提供一个默认值
2:输入2,先退出,在models.py对应的新字段中添加default=xx,然后再重新makemigrations与migrate。
注意:删除的时候由于不需要默认值,就可以直接完成删除了。