1.Django的ORM简介
Django的ORM系统的分析:
orm系统的方法--------封装-------->python代码--------执行------>sql语句-------操作------->数据库
1.ORM概念:对象关系映射(Object Relation Mapping,简称ORM)
2.ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
2.django模型映射的关系
模型类------------->数据表
类属性------------->表字段名
1.模型类必须写在app下的models.py文件中。
2.模型如果需要映射到数据库,所在的app必须被安装。
3.一个数据表对应一个模型类,表中的字段,对应模型中的类属性。
3.数据库的配置
在根目录下的settings.py下更改代码
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE':'django.db.backends.mysql',#数据库引擎
'NAME':'mydb', #数据库名称
'USER':'root', #链接数据库的用户
'PASSWORD':'qwe123', #用户密码
'HOST':'127.0.0.1' #mysql服务器IP
'PORT':'3306' #数据库默认的是3306
}
}
如果root密码忘记,可以创建一个管理员用户。
创建一个管理员用户boshan账号,密码为boshan:
CREATE USER ‘boshan’ @’%‘IDENTIFIED BY ‘boshan’;
给这个用户授权所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON . TO ‘boshan’@’%’;
使授权立即生效:
FLUSH PRIVILEGES;
4.pymysql数据库连接器的配置
在虚拟环境中安装pymysql:
pip install pymysql
设置连接器为pymysql:
在主目录下的_init_.py文件添加下面两句
import pymysql
pymysql.install_as_MySQLdb()
init.py
import pymysql
pymysql.install_as_MySQLdb()
5.将模型类映射到数据库
1.首先执行以下命令,要创建映射文件
python manage.py makemigrations appname
2.执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate appname
命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行。
在执行命令前,保证创建模型的app是已经注册过的。
from django.db import models
#Create your models here.
#1.创建模型类
class User(models.Model):
id = models.AutoField(primary_key=True) #主键约束,可以省略
name = models.CharField(max_length=30,default='boshan') #控制字符串长度
age = models.IntegerField(default=18)
sex = models.CharField(max_length=30,default='male')
address = models.CharField(max_length=30,default='suzhou')
#2.将模型映射到数据库中
#python manage.py makemigrations appname
#3.将映射文件中的数据真正提交到数据库
#python manage.py migrate appname
小提示:如果字段没加默认值的话,可能会和数据库同步不成功。
6.数据的增删改查
models_test/urls.py
from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
path('add_user/',views.add_user),
path('delete_user/',views.delete_user),
path('update_user/',views.update_user),
path('select_user/',views.select_user)
]
(1)增
models_test/views.py
def add_user(request):
# #方法一
# boshan = User(name='boshan',age=18,sex='male',address='苏州')
# boshan.save()
#方法二
# xiaoming = User()
# xiaoming.name = 'xiaoming'
# xiaoming.age = 19
# xiaoming.sex = 'famale'
# xiaoming.address = '吴中区越溪'
# xiaoming.save()
#方法三
# User.objects.create(name='zhangsan',age=28,sex='male',address='苏州姑苏区')
#方法四--不重复添加
User.objects.get_or_create(name='lisi',age=22,sex='male',address='苏州同里')
return HttpResponse('添加成功!!')
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191115160803973.png
(2)查
通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的_str_方式
all()和filter()方法返回的是QuerySet对象
get()方法返回的单个对象,如果符合条件的对象有多个,则get报错。
QuerySet API
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做QuerySet。
2.QuerySet是可迭代对象。
3.QuerySet支持切片,不支持负索引。
4.可以用list强行将QuerySet转成列表。
第一种方法:
def select_user(request):
#查询所有的数据
result = User.objects.all()
print(result)
return HttpResponse('查询成功!!')
在控制台打印的结果
<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>, <User: User object (4)>, <User: User object (5)>, <User: User object (6)>, <User: User object (7)>]>
可以在models.py中创建魔法方法,转换格式
创建__str__魔法方法
#1.创建模型类
class User(models.Model):
id = models.AutoField(primary_key=True) #主键约束,可以省略
name = models.CharField(max_length=30,default='boshan') #控制字符串长度
age = models.IntegerField(default=18)
sex = models.CharField(max_length=30,default='male')
address = models.CharField(max_length=30,default='suzhou')
def __str__(self):
return 'User<id=%s,name=%s,age=%s,sex=%s,address=%s>' % (self.id,self.name,self.age,self.sex,self.address)
第二种方法:
通过迭代
def select_user(request):
#查询所有的数据
result = User.objects.all()
for foo in result:
print(foo)
return HttpResponse('查询成功!!')
查询单条数据
def select_user(request):
#查询所有的数据
#result = User.objects.get(name='boshan')
#查询年龄大于18的
result = User.objects.filter(age__gt=18)
print(result)
return HttpResponse('查询成功!!')
查询满足条件的数据
可以输入多个条件
def select_user(request):
#查询满足条件的数据
result = User.objects.filter(name='zhangsan')
print(result)
return HttpResponse('查询成功!!')
(3)改
def update_user(request):
reslut = User.objects.get(id=3)
reslut.name = '嘻嘻嘻'
reslut.save()
(4)删
def delete_user(request):
User.objects.get(id=4).delete()
return HttpResponse('删除成功!!')
总结:
Django模型的基本的流程
1.数据库的配置
2.连接器的配置
3.django模型的编写
4.模型映射
5.简单的增删查改