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字段介绍
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