Django 模型
模型里的类 == 数据库里的表
orm 系统 对象关系映射
ORM概念:对象关系映射(Object Relational Mapping 简称ORM)
ORM的优势:不用直接编写SQL代码,只需要像操作对象一样从数据库操作数据。
1、链接数据库:
setting:DATABASE配置
__init__:pymysql配置
2、创建模型 要先继承 models.Model
然后设置 字段,属性:
id = models.AutoField(primary_key=True) #可以省略不写 继承的父类里有 表示ID字段自增长
name = models.CharField(max_length=30) #表示创建name是字符类型最大值是30
age = models.IntegerField() #表示创建age是整型
name = models.CharField(max_length=30,unique=True) #设置name字段并且定义为唯一键。
age = models.IntegerField()
note = models.TextField()
gender = models.BooleanField(default=True) #因为BooleanField 只有两个值 true和false 两个值 设置默认值为True 那么默认值也就是1
create_time = models.DateField(auto_now_add=True) #这个是日期类型,没有时间 第一次添加数据进去,都会将当前时间设置进去。当以后修改条数据其他字段时,不会修改这个值
uqdate_time = models.DateTimeField(auto_now=True) #日期时间类 每次修改都会将当前时间更新进去。
字段的约束:除了上面提到的 还有些 外键 主键 非空 唯一等等。
表关系:
student = models.ManyToManyField('Student')
#表中多对多关系
s_id = models.OneToOneField('Student',on_delete=models.CASCADE)
#数据库一对一关联
department = models.ForeignKey('Department',on_delete=models.CASCADE)
#当 Department有数据删除时那么关联的相关数据也会删除
#如果模型I有一个ForeignKey,那么该ForeignKey 所指的模型II实例可以通过一个管理器回前面有ForeignKey的模型I的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称 可以在定义时设置related_name 参数来覆盖foo_set 的名称.
def __str__(self):
return 'Student<s_id=%s,s_name=%s,department=%s>' % (self.s_id, self.s_name, self.department_id)
#输出格式 进行优化
创建好Django的模型类,将模型类映射到数据库:
1、首先执行以下命令,要创建映射文件
python manage.py makemigrations
2、执行以下命令将映射文件中的映射数据提交到数据库中
python manage.py migrate
创建一个管理员用户taka账号,密码为liugang;
CREATE USER 'taka'@'%'IDENTIFIED BY 'liugang';
给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON * * TO 'taka'@'%';
是授权立即生效
FLUSH PRIVILEGES;
4、数据表操作
插入数据
#方法一:
lg = User1(name='liugang',age=21)
lg.save() #传入数据库中
return HttpResponse('插入数据成功')
#方法二:
xly = User1()
xly.name = 'xve'
xly.age = 22
xly.save()
return HttpResponse('插入数据成!!!!')
#方法三:
create()
#方法四:
get_or_create()
查询
filter() 返回是queryset 类型
all() 返回是queryset 类型
get() 返回的类型是单个实例对象 但是必须保证满足条件的只有一个对象
修改
1.先查到,属性赋值修改,save()
2.update
删除
delete()
以上是普通数据库表的操作,接下来是关系表中的数据操作 需要管理器 : 一对多 and 多对多
只要是多的那一头才有的属性方法
增:add() create()
改:remove() add()
删:remove() ***clear()清空
表关联对象的访问
student.department 只有在我们的Student模型类里面用了外键,department属性可以直接访问。
department.student_set 反向查询
视图函数 views.py 可以自己定义类或者在原有的类上面进行修改
from django.shortcuts import render,redirect,reverse
# Create your views here.
from django.views import View
class Test_Department(View):
def get(self,request):
return render(request,'book_loog/index.html')
在 url 文件里配置上
from django.urls import path
from . import views_test
urlpatterns = [
path('cls/',views_test.Test_Department.as_view(),name='test'),
]
return HttpResponse('完结 萨斯给 ')