创建一个项目
django-admin.py startproject app01
在settings.py中修改INSTALLED_APPS
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01', # 添加此项
)
项目中的models.py
# app01/models.py
class Sites(models.Model):
id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
title = models.CharField(max_length=32) # 书籍名称
price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格
publish = models.CharField(max_length=32) # 出版社名称
pub_date = models.DateField() # 出版时间
执行命令
python3 manage.py migrate # 创建表结构
python3 manage.py makemigrations app01 # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate app01 # 创建表结构
注:需要连接数据库
路由配置
# app01/urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('add_book/', views.add_book),
]
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
book = models.Book(title="python程",price=300,publish="hero",pub_date="2008-8-8")
book.save()
return HttpResponse("数据添加成功!
")
from django.shortcuts import render, HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.create(title="如来神掌", price=200, publish="功夫出版社", pub_date="2010-10-10")
return HttpResponse("数据添加成功!
")
返回的是QuerySet类型数据,类似于list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.all()
print(books, type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。
return HttpResponse("查找成功!
")
返回的是QuerySet类型数据,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.filter(pk=5)
print(books)
print("//")
books = models.Book.objects.filter(publish='python', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("查找成功!
")
注:pk意思是primary key,相当于id
返回的是QuerySet类型数据。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.exclude(pk=5)
print(books)
print("//")
books = models.Book.objects.exclude(publish='菜鸟出版社', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("查找成功!
")
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.get(pk=5)
books = models.Book.objects.get(pk=18) # 报错,没有符合条件的对象
books = models.Book.objects.get(price=200) # 报错,符合条件的对象超过一个
print(books, type(books)) # 模型类的对象
return HttpResponse("查找成功!
")
返回的是QuerySet类型数据。
注:
1、参数的字段名要加引号
2、降序为在字段前面加个符号 -
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.order_by("price") # 查询所有,按照价格升序排列
books = models.Book.objects.order_by("-price") # 查询所有,按照价格降序排列
return HttpResponse("查找成功!
")
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.count() # 查询所有数据的数量
books = models.Book.objects.filter(price=200).count() # 查询符合条件数据的数量
return HttpResponse("查找成功!
")
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.exists()
# 报错,判断的数据类型只能为QuerySet类型数据,不能为整型
books = models.Book.objects.count().exists()
# 报错,判断的数据类型只能为QuerySet类型数据,不能为模型类对象
books = models.Book.objects.first().exists()
return HttpResponse("查找成功!
")
注:判断的数据类型只能为QuerySet类型数据
注:
1、对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在
2、distinct()一般是联合values或者values_list使用
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
# 查询一共有多少个出版社
books = models.Book.objects.values_list("publish").distinct() # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
books = models.Book.objects.distinct()
return HttpResponse("查找成功!
")
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
# 查询价格为200或者300的数据
books = models.Book.objects.filter(price__in=[200,300])
return HttpResponse("查找成功!
")
# 查询价格大于200的数据
books = models.Book.objects.filter(price__gt=200)
# 查询价格大于等于200的数据
books = models.Book.objects.filter(price__gte=200)
# 查询价格小于300的数据
books=models.Book.objects.filter(price__lt=300)
# 查询价格小于等于300的数据
books=models.Book.objects.filter(price__lte=300)
books = models.Book.objects.filter(title__contains="菜")
books = models.Book.objects.filter(title__icontains="python") # 不区分大小写
对象.delete()
返回值:元组,第一个元素为受影响的行数
books = models.Book.objects.filter(pk=8).first().delete()
类型数据.delete()
返回值:元组,第一个参数为受影响的行数
books = models.Book.objects.filter(pk__in=[1, 2]).delete()
注:
1、Django删除数据时,会模仿SQL约束ON DELETE CASCADE的行为,也就是删除一个对象也会删除与它相关两的外键对象。
2、delete()方法是QuerySet数据类型的方法,但并不适用于Manager本身。想要删除所有数据,不能不写all。
books=models.Book.objects.delete() # 报错
books=models.Book.objects.all().delete() # 删除成功
模型类的对象.属性 = 更改的属性值
模型类的对象.save()
返回值:编辑的模型类的对象
方式二:QuerySet类数据 update(字段名=更改的数据)
返回值:整数,受影响的行数
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.filter(pk__in=[7, 8]).update(price=888)
return HttpResponse(books)