模型基础
01-Django的ORM简介
02-数据库连接配置
03-模型的创建与映射
04-数据的增删改查
01-Django的ORM简介
Django的ORM系统的分析:
1.ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
2.ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
django模型映射关系
1. 模型类必须都写在app下的models.py文件中。
2. 模型如果需要映射到数据库,所在的app必须被安装.
3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
02-数据库的配置:
1.在settings.py中配置DATABASES
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'crm', # 数据库名称 'USER': 'guang', # 链接数据库的用户名 'PASSWORD': 'q123', # 链接数据库的密码 'HOST': '127.0.0.1', # mysql服务器的域名和ip地址 'PORT': '3306', # mysql的一个端口号,默认是3306 } }
2、pymsql数据库连接器的配置:
在虚拟环境中安装pymysql: pip install pymysql
设置连接器为pymysql: 在主目录下的的__init__.py文件添加下面两句 import pymysql pymysql.install_as_MySQLdb()
03-模型的创建与映射
就是django.db.models.Model 的一个子类。
模型定义在app文件夹下的models.py文件
常用的字段类型映射关系:
常用字段类型参考:https://www.cnblogs.com/laoguiaabb/p/8182906.html
激活模型
1、创建迁移:python manage.py makemigrations appname
必须要在settings中注册注册应用
- 创建迁移 只是告诉django,我们修改了模型,它不会操作数据库
python manage.py makemigrations appname
2、 查看迁移执行命令:python manage.py sqlmigrate teacher 0001
如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看它大概会执行什么sql语句(就是看低层执行的代码)
执行迁移 操作数据库,将对模型的改动应用到数据库(底层就是执行了sql)
3、 执行迁移:python manage.py migrate appname
模型映射到数据库中是一张表 ,表名 = appname_模型name
执行上面的命令,到底干了些什么?
- 在app中查找迁移文件,并且去django_migrations表中查找,如果有没有执行的迁移文件,就去执行它
- 执行了迁移生成的sql语句
- 如果成功,会在django_migrations表中增加一条记录
(修改迁移文件后需要重新创建迁移和执行迁移)
04-数据的增删改查
django 调试环境:python manage.py shell
数据的增删改查----------增加数据
1.在视图函数中导入User模型类,然后使用下面的方法添加数据
数据的增删改查----------查找数据
1.在视图函数中导入User模型类,然后使用下面的方法查数据
all()和filter()方法返回的是QuerySet对象.
get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
数据的增删改查----------修改数据
1.在视图函数中导入User模型类,然后使用下面的方法修改数据
在这之前,我们在模型类中添加了一个city的属性,并设置了一个默认值,然后执行了映射命令,讲字段成功映射到了数据库中.
数据的增删改查----------删除数据
1.在视图函数中导入User模型类,然后使用下面的方法删除数据
数据的增删改查--------数据库相关的接口(QuerySet API)
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
2.QuerySet是可迭代对象.
3.QuerySet支持切片, 不支持负索引.
4.可以用list强行将QuerySet变成列表.
数据的增删改查总结
### 增 ``` # 第一种方式 In [3]: s = Student() In [5]: s.name = '心蓝' In [6]: s.age = 18 In [7]: Student.objects.all() Out[7]: <QuerySet []> In [8]: s.save() # save之后才会写到数据库 # 第二种方式 stu = Student.objects.create(name='敬子明', age=10) # 直接创建 ``` ### 删 ```` In [12]: stu.delete() Out[12]: (1, {'teacher.Student': 1}) # 删除多条 In [12]: Student.objects.filter(sex=1).delete() Out[12]: (1, {'teacher.Student': 1}) ```` ### 改 ``` # 改一条 In [16]: s.age = 16 In [17]: s.save() # 改多条 In [10]: Student.objects.all().update(sex=0) Out[10]: 2 ``` ### 查 ``` # 查所有 In [2]: Student.objects.all() Out[2]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]> # 查一条 In [3]: Student.objects.get(pk=1) Out[3]: <Student: 心蓝> # get 返回的是对象 如果返回了多值就会报错 # 带条件 In [8]: res = Student.objects.filter(sex=1) # where sex=1 In [9]: res Out[9]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>
选择大于努力 ,完结--------