注意:数据库多种多样,这导致使用不同的数据库就要使用不用的操作数据库的命令,如果我们先是使用的Mysql数据库, 之后因为某些要求要使用到Redis数据库,难道我们要将我们整个项目的相关语句全部都改一遍吗!!!但是至少我知道Django不需要。因为Django自带强大的ORM系统!!!
小拓展:如果使用的是Jva的web框架或者是tornado,flask等不具备此系统的框架,我们也是可以嵌套使用Django框架的ORM系统进行模型迁移哦!!!
1. 模型类必须都写在app下的models.py文件中。
2. 模型如果需要映射到数据库,所在的app必须注册.
3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
# Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'db_test', # 数据库名称 'USER': 'root', # 连接数据库的用户名 'PASSWORD': 'qwe123', # 连接数据库的密码 'HOST': '127.0.0.1', # mysql服务器的域名和ip地址 'PORT': '3306', # mysql的一个端口号,默认是3306 } }
import pymysql pymysql.install_as_MySQLdb()3.模型的创建与映射
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) #主键可以省略,Django默认会为我们加上一个名为id的主键,写的话就可以改主键的名字! name = models.CharField(max_length=50) age = models.IntegerField()
命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行(第一次的话不指定)
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
在视图函数中导入User模型类,然后使用下面的方法添加数据:
from .models import User def add_user(request): #方法一 taka = User(name='taka',age=18) taka.save() #方法二 xiaopo = User() xiaopo.name = 'xiaopo' xiaopo.age = 18 xiaopo.save() #方法三 aa = User.objects.get_or_create(name='xiaohong',age=18) #插入前会进行查找,如果没有相同的数据就会添加;如果有就不会 print(aa) #回返回一个元组,第一个数据是添加成功的实例;第二个数据是True或False。(添加成功为True;反之为False) User.objects.get_or_create(name='xiaohong',age=18)#插入前会进行查找,如果没有相同的数据就会添加;如果有就不会 return HttpResponse("插入数据成功!")
实现效果:
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) #主键可以省略,Django默认会为我们加上! name = models.CharField(max_length=50) age = models.IntegerField() def __str__(self): #此方法的作用在查询时会显示! return 'User<id=%s,name=%s,age=%s>' %(self.id, self.name, self.age)
在视图函数中导入User模型类,实现简单的查找
from .models import User def search_user(request): #查询所有记录对象 rs1 = User.objects.all() print("这是所有记录对象:",rs1) #通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式. #查询一个记录对象 rs2 = User.objects.get(id = 1) print("这是一个记录对象:",rs2) #查询满足条件的对象 rs3 = User.objects.filter(name='xiaoming') print("这是满足条件的对象:",rs3) return HttpResponse("查询数据成功!")
**注意:
1.all()和filter()方法返回的是QuerySet对象.
2.get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!而且如果查询不到也会报错!
**
实现效果:
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
2.QuerySet是可迭代对象.
3.QuerySet支持切片, 不支持负索引.
4.可以用list强行将QuerySet变成列表.
在视图函数中导入User模型类,然后使用下面的方法删除数据:
from .models import User def delete_user(request): #实例和QuerySet都具备删除方法 User.objects.get(id=1).delete() #get方法得到的是单个对象,所以是删除一个数据! User.objects.filter(age=18).delete() #删除所有age属性值为18的数据! User.objects.all().delete() #删除所有数据! s = User.objects.filter(age=18) s[1].delete() #删除名字为18的数据中的指定的一条 return HttpResponse("删除数据成功!")
在视图函数中导入User模型类,然后使用下面的方法更新数据:
from .models import User def update_user(request): #第一种方法:先查找到数据,然后再进行属性赋值修改(对于实例的修改) rs = User.objects.get(name="xiaoming") #修改name属性值为xiaoming的name属性值为xiaowang(因为使用了get方法所以仅修改第一条!) rs.name='xiaowang' rs.save() #第二种方法:使用update方法直接修改(对于集合的修改) User.objects.filter(name='xiaowang').update(name='AAA') #修改所有name属性值为xiaowang的name属性值为AAA! User.objects.all().update(age=22) #修改所有数据的age属性值为22! return HttpResponse("修改数据成功!")