12月24日任务
1.1 ORM基础—ORM补充
1.2.1 增删改查之查询
1.2.2 删改增 (1)
1.2.3 删改增 (2)
1.1 ORM基础—ORM补充
1.2.1 增删改查之查询
1.2.2 删改增 (1)
1.2.3 删改增 (2)
Django配置绑定MySQL数据库
在setting.py找到DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Django', #数据库名
'USER': 'root', #用户名
'PASSWORD': '123456', #密码
'HOST': 'localhost', #指定MySQL数据库电脑IP
'PORT': '3306',
}
}
问题 缺少MySQLdb包
Error loading MySQLdb module: No module named 'MySQLdb
解决
在项目目录下__init__.py 添加下面参数
import pymysql
pymysql.install_as_MYSQLdb()
ORM基础
在model.py中每一个类对应的数据的每一个表 ,他们都是继承models.Model类
模型类的属性和选项
格式:
属性名 = models.字段类型(选项)
使用时要引入django.db.models包
类型
AutoField 自动增加的整型 一般不指定,用于ID
BooleanField 布尔值 值为True或False
NullBooleanField 值为Null True或False
CharField(max_length =最大长度) 字符串 max_length 表示最大字符个数
TextField 大文本字段
IntegerField 整型
DecimalField(max_digits = 数字,decimal_places=数字) 十进制浮点 多用于金钱 max_digits表示总位 decimal_places表示小数位数
FloatField 浮点型 参数同上
DateField([auto_now=Flase,auto_now_add=False]) 日期 auto_now表示修改日期 auto_now_add表示创建日期 两个参数同时只能存在一个
TimeField 时间 参数同上
DateTimeField 日期时间 参数同上
FileField 上传文件字段
ImageField 继承FileField 同于上传图片
选项
default 默认值
primary_key True 该字段为模型的主键字段,默认是False 一般作为AutoField选项使用
unque True 该字段在表中必须唯一
db_index True 在表中为此建立索引
de_column 指定数据表字段的名字 de_column='title'
null True 允许该数据表的字段为空 默认False
blank True 允许该后台管理页面上字段为空 默认False
选择default和blank 不影响表结构,不需要重新做迁移
模型类关系
1)一对多关系
models.ForeignKey() 定义在多类中
2)多对多关系
models.ManyToManyField() 定义在哪个类中都可以
3)一对一关系
models.OneToOneField() 定义在哪个类中都可以
关联查询(一对多)
在一对多关系中,一对应的类交一类,多对应的类叫多类。在多类中定义的建立关联的类属性叫做关联属性。
通过模型类对象实现关联查询
一类查多类所有信息
格式:
一类对象.多类名.set.all()
多类查一类所有信息
格式:
多类对象.关系属性
示例
查询id为1的图书关联的英雄信息
b= BookInfo.objects.get(id=1)
b.heroinfo_set.all()
查询id为1的英雄关联的图书信息
h = HeroInfo.objects.get(id=1)
h.hbook
单表查询
通过模型类.objects调用下面函数
函数 功能
get 返回表中满足条件的
一条数据 返回模型类对象
all 返回表中所有数据 返回QuestSet(查询集)对象的列表 可遍历
fiiter 返回满足条件的数据 返回QuestSet对象的列表 后跟.first().last()取第一个/最后一个值
exclude 返回不满足条件的数据 返回QuestSet对象
order_by 对查询结果进行排序 返回QuestSet对象 默认是升序
查询id是2的值
user = UserInof.objects.get(id=2)
查询所有值
user = UserInof.objects.all()
查询密码是123456的值,可多个
user = UserInof.objects.filter(passwd='123456')
单表增加
create 增加数据
增加一条名字叫王五,密码是123456的数据
user = UserInof.objects.create(user='王五',passwd='123456')
单表删除
delete 删除数据,基于查询的前提
删除user叫王五的信息
user = UserInof.objects.filter(user='王五').delete()
单表修改
update 修改数据,基于查询的前提
save 修改数据,基于查询的前提
把id是2的user改为王五
user = UserInof.objects.filter(id=2).update(user='王五')
或者
user = UserInof.objects.get(id=2)
user.user='王五'
user.save()