模型部分讲解
本文是自己学习做的笔记,如有雷同纯属巧合,如有问题请指出,谢谢!
基于环境Ubuntu16.04
python3.6
Django 2.07
[储备知识] ORM(对象object-关系relationship-映射map)
ORM的作用->完全面向对象不需要对任何sql语句进行操作,这样修改数据库(orcale/sqlite3/mysql)时只需要对少量代码进行修改
(1)数据库的更换
1-在mysql下创建数据库,如名为test2(Django默认是sqlite3的数据库,换库配置需要换)
2-更换mysql数据库: 在settings文件中的数据库做如下配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': 'root',
'PASSWORD': 'mysql',
'HOST': 'localhost',
'PORT': '3306'
}
}
这里的name为需要使用到的mysql数据库的名称,USER PASSWORD为登陆数据库的用户名密码
HOST为数据库的IP地址,PORT默认为3306
注意python3可能安装不上MYSQLdb可以用pymysql代替
方法为
import pymysql
pymysql.install_as_MySQLdb()
Django根据属性的类型确定:当前选择数据库支持字段的类型以及默认的控件类型,比如搜索框等
Django会为表自动添加primary key每个模型只有一个pk(primary key)如果已经赋予了一个PK则不会自动添加
在models里面定义表时,表名注意:1-不能设为python预留的名称 2-不能包含__两个以上连续的下划线(__在后面做查询的时候用到)
[一]表内属性的定义类型
1-字段类型
常用的字段类型有:
from django.db.models as models
models.BooleanField
models.FloatField
models.TimeField
models.DateTimeField
models.DecimalField(max_digits,decimal_places) # 第一个参数是总的数的位数,第二个数是小数的位数
models.FileField: 一个上传文件的字段 models.ImageField:保证上传是个有效的image
# 这二者一般而言不会用,一般只会把文件上传到云
# 然后上传磁盘上的地址就可以
………………等字段的类型,都以Field结尾
(在设计表的时候可以定义一个isDelete的属性做逻辑删除不做物理删除)
2-字段选项
null --->True Django将null存储到数据库
blank --->True允许该字段为空白
db_column --->字段的名称,如果未指定就用属性的名称
db_index --->如果为True则在表中为字段创建索引(加速查询)
default --->默认值
primary --->是否为主键 此时字段设置为AutoField。
unique --->如果为True这个字段在表中必须有唯一值
用法如下
hname = models.CharField(max_length=20, db_column='Hero Name')
hgender = models.BooleanField(default=True)
3-关系(都在models中)
F