Django对于数据库的基础知识
发布日期:2022-03-02 13:23:45 浏览次数:12 分类:技术文章

本文共 2746 字,大约阅读时间需要 9 分钟。

Django生成数据库表结构
我们对于数据库的操作,于app里的models.py文件中编写,当我们编写时,首先得在工程中是settings上找到INSTALLED_APPS中添加下图,创建app名叫啥就填啥在这里插入图片描述

然后我们打开models.py文件,首先 class创建数据库括号内必填models和Model,然后下方即创建数据类型,CharField即字符串即该值的类型,常用的有数字 字符串 时间,max_length即字符长度,在创建时,会自动生成一个id列,自增及主键,至此我们简单表结构就设计好了,如果不设置表名 会自动生成为:
app名_userinfo

在这里插入图片描述
然后切换到我们的pycharm,底部找到Terminal,先输入
1.python manage.py makemigrations
2.python manage.py migrate
我们的数据库结构就创建成功了,保存在目录下db.sqlite中在这里插入图片描述
那么接下来我们就学习对数据库进行增删改查,首先我们在views.py文件下定义一个orm方法,用于进行数据库操作
首先导入views下导入models from app import models
1.数据库增加创建
1.1orm下编写mdoels.数据库名.objects.create(对应结构名=‘添加的值’)
在这里插入图片描述
通过以下方法,也是可以达成创建增加数据库的方法
在这里插入图片描述
还可以通过传字典的方式,不过字典名必须加上**
在这里插入图片描述
数据库查找
all即是查找所有,查找到的值是一个整体,就是以每一行的值返回,需要查看所有值可以 循环此命名,然后打印值
在这里插入图片描述
上面介绍了查所有,来看看指定查询filter的用法,大致一样,filter后面括号接条件即可

result = models.cmdbku.objects.filter(username='root',password='123')

数据库删除

models.cmdbku.objects.filter(id=3).delete(),filter改为all即删除所有

数据库修改
首先找到要修改的数据再使用update进行修改数据
在这里插入图片描述
当我们生成好数据库时添加数据库表结构的时候,添加多一列的时候,输入

python manage.py makemigrations 提示

在这里插入图片描述
输入1后会让你输入值,意思是让你输入之前生成的列在此新成的行下的值
再执行 python manage.py migrate 即可成功生成

Django ORM字段介绍
字符串字段 :CharField EmailField URLField自增字段:AutoField

Django ORM字段参数介绍
null 是否可以为空 default默认值 primary_key 主键 db_column 设置列明
db_index 索引 unique唯一索引 unique_for_xx截段做索引 只对xx部分做索引
auto_now创建时自动生成时间 auto_now_ad调用时更新为当前时间
在这里插入图片描述

choices | 在django admin中显示下拉框 避免链表查询,首先命名创建一个元组,choices=命名
在这里插入图片描述

blank |django admin是否可以为空,null是在数据库中

verbose_name | django admin显示字段中文
editable | django admin是否可以被编辑 False不可被编辑,该列会直接被隐藏在这里插入图片描述

help_text | django admin提示
在这里插入图片描述
外键关联
在某一个数据库下编写下面语句,关联别的数据库,to_field表示要跟哪个字段关联,默认则是关联主键,Django2.0中必须加上on_delete,用于设置关联表中数据删除时,执行啥啥啥操作,想要详细了解的可以百度一下

自命名=models.ForeignKey('被关联数据库名',to_field='uid',default=1,on_delete=models.DO_NOTHING)

关联之后,会生成两个对象,自命名_id和自命名 自命名中包括了被关联表的所有数据,然后即可可调用被关联表的值,当我们需要自命名的username值时

1.首先外键关联表让1表关联2表
在这里插入图片描述

我们是通过1表外键关联2表,那么如何通过1表获取2表的值呢?
2.首先 我们通过数据库找到1表中的所有值,并传给html
在这里插入图片描述
3.通过for循环将值显示出来,如以row循环上方的user_list,则获取2表的数据则是 row.user_group.username 即可获取2表的数据
在这里插入图片描述获取表单数据的三种方式
获取时末尾有values的获取都是字典,有value_list获取都是元组,其余都是获取的对象
v1是将获取的各行数据获取封装在在对象中
v2是以字典的方式获取,可以获取指定内容
v3是以元组方式获取,调用时使用索引
在这里插入图片描述在这里插入图片描述

神奇的双下划线
大于小于
xx__gt代表获取大于xx的数据
lt则代表小于在t后面加e则代表大于等于或小于等于在这里插入图片描述
跨表查询
当我们将数据库表中值获取后,传给html页面,可以通过点‘.’外键再点‘.’进行跨表查询。
在这里插入图片描述
但是当我们获取数据库表时,在values内想获取外键关联表中的指定的数据,用点‘.’的方式获取是会报错的,如下
在这里插入图片描述
这时我们就要用到我们神奇的双下划线
将下划线中的b.caption改为b__caption
在这里插入图片描述一对多块表操作的三种方式
1.values情况下在上面我介绍了获取表单的三种方式,当我们只想获取指定类型的数据是外键关联的表时在查找zhongfilter(条件).values(内添加了双下划线,如b__caption)
我们在html页面调用时也要使用b__caption才会显示值
在这里插入图片描述
2.values_list情况下
上面values获取的是字典,而我们通过values_list获取的是元组的模式,其中也有b__caption获取其他表的值,当在html页面调用时,则是根据values_list里的索引进行赋值,不用写上b__caption,仅是values情况下才要写
在这里插入图片描述
**3.all情况下:**这种是最简单的上面说过,当我们获取时是all获取全部数据的时候,我们只需要根据点‘.’进行跨表查询即可,下图其中的b是外键关联的命名
在这里插入图片描述
在这里插入图片描述
html页面for循环的计数器
当我们看别人表格前,前方都有个序号,只添加id的话做不到同步,当for循环时,会有一个参数 forloop.counter用于计数,就是一个计数器
forloop.count0即为从0开始计数 revcounter则为反着来 加0则从0开始反着来
小扩展:forloop.last和first为判断该列是否最后一个和第一个,是则返回True 否则False
在这里插入图片描述

转载地址:https://blog.csdn.net/WOSHIBEIZHE/article/details/120480145 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Django框架的基础知识笔记
下一篇:小白笔记-RabbitMQ消息队列

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2023年01月18日 16时26分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

Prometheus学习系列(十)之任务与实例 2019-06-28 13:57:46
C#中的集合 2019-06-28 13:57:45
一、Java语言基础(4)_方法和数组——数组 2019-06-28 13:57:45
servlet 2019-06-28 13:57:45
Python学习之路39-特性property 2019-06-28 13:57:44
【BZOJ】2134: 单选错位 期望DP 2019-06-28 13:57:44
iOS 证书申请新步骤 2019-06-28 13:57:44
Redhat6 —— Yum详解 2019-06-28 13:57:43
Babel 相关使用 2019-06-28 13:57:42
dom4j解析XML文件-基本curd操作示例 2019-06-28 13:57:42
request.getContextPath获取绝对路径 2019-06-28 13:57:41
腾讯原创管 2019-06-28 13:57:41
C# 用户控件之温度计 2019-06-28 13:57:41
JQuery中 数组与字符串(过滤,排序,拆分,合并) 2019-06-28 13:57:40
透视投影矩阵 2019-06-28 13:57:40
WinHex 15.8 r4 注册信息 2019-06-28 13:57:40
移动小bug 2019-06-28 13:57:39
Codeforces Round #427 (Div. 2)——ABCD 2019-06-28 13:57:39
我对OpenAPI的理解 2019-06-28 13:57:38
String类的常见方法的使用案例 2019-06-28 13:57:38