Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查
Django
- ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
- ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
Django的模型映射关系
- 模型类必须都写在app下的models.py文件中。
- 模型如果需要映射到数据库,所在的app必须被安装.
- 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
在项目的settings文件中的DATABASES
注意:NAME是数据库的库名,在使用之前,需要先在数据库中新建一个对应名字的database
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.msyql', 'NAME': database_name, 'USER': username, 'PASSWORD': password, 'HOST': '127.0.0.1', 'PORT': '3306' } }
- 创建一个管理员用户pywjh账号,密码为 pywjh:CREATE USER 'pywjh'@'%'IDENTIFIED BY 'pywjh';
- 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
- GRANT ALL ON *.* TO 'pywjh'@'%';
- 使授权立即生效:FLUSH PRIVILEGES;
pymsql数据库连接器的配置
设置连接器为pymysql:
在主目录下的的__init__.py文件添加下面两句
import pymysql pymysql.install_as_MySQLdb()
首先,在哪个APP下创建模型,都要先在settings中注册APP
APP my_sql下的models.py
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) # id属性,不用添加Django也会自动添加 name = models.CharField(max_length=10) age = models.IntegerField() def __str__(self): # 定义输出方法,在查询的时候使用 return 'User<id=%s, name=%s, age=%s>'%( self.id, self.name, self.age )
然后在创建映射文件:( 后面可以跟APP的名字,不跟则表示全部都映射)
python manage.py makemigrations [app_name]
将映射数据提交到数据库中:
python manage.py migrate [app_name]
这是就会在数据库中看到自己创建的模型
打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
数据库的增删改查
增:
配置到url后,在视图views中:
from django.http import HttpResponse from .models import User def add(request): # # 方法一 # user = User() # user.name = '张三' # user.age = 22 # user.save() # # 方法二 # user = User(name='李四', age=23).save() # # 方法三 # User.objects.create(name='王五', age=22) # 方法四 User.objects.get_or_create(name='周六', age=24) # 这个方法不会重复添加 return HttpResponse('添加数据成功')
检查数据库:
views中:
查看全部数据
from django.http import HttpResponse from .models import User def get(request): # 获取全部数据 result = User.objects.all() print(result) return HttpResponse('查询数据成功')
User.objects.all()——后台输出:
查询一个数据:
def get(request): # 查村一个数据 result = User.objects.get(id=1) print(result) return HttpResponse('查询数据成功')
查询满足条件的数据:
def get(request): # 查询满足条件的数据 result = User.objects.filter(name='王五') print(result) return HttpResponse('查询数据成功')
注意:
- 通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.
- all()和filter()方法返回的是QuerySet对象.
- get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
- 1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
- 2.QuerySet是可迭代对象.
- 3.QuerySet支持切片, 不支持负索引.
- 4.可以用list强行将QuerySet变成列表.
补充:
获取一个属性的搜索数据:
def get(request): # 单独获取一个属性的全部数据 result = User.objects.values('age') print(result) return HttpResponse('查询数据成功')
去重:
def get(request): # 单独获取一个属性的全部数据,并去重 result = User.objects.values('age').distinct() print(result) return HttpResponse('查询数据成功')
在操作之前,先在models中在添加一个city的属性,规定模型添加属性要加上默认值,不要忘记创建映射文件已经映射数据
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=10) age = models.IntegerField() city = models.CharField(max_length=20, default='北京') def __str__(self): return 'User<id=%s, name=%s, age=%s>'%( self.id, self.name, self.age )
映射文件以后再查看数据库:
views:
def update(request): # 先查找到数据在进行修改 res = User.objects.get(name='张三') res.city = '武汉' res.save() # 用update直接修改 # update针对的是QuerySet类型的数据 User.objects.filter(name='李四').update(city='重庆') return HttpResponse(' 数据修改成功')
所有的方法都是用与delete方法
def delete(request): result = User.objects.get(id=1) result.delete() User.objects.filter(name='周六').delete() return HttpResponse('删除数据成功')