单表操作
2.表单操作--添加数据
直接上代码
ORM/urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index)
]
app01/models.py
from django.db import models
# 利用类创建一个Book表 ,必须继承models.Model类
class Book(models.Model):
id = models.AutoField(primary_key=True,unique=True)
title = models.CharField(max_length=32)
state = models.BooleanField()
pub_date = models.DateField()
price = models.DecimalField(max_digits=8, decimal_places=2)
publish = models.CharField(max_length=32)
app01/views.py
from django.shortcuts import render,HttpResponse
from app01.models import Book # 自己创建的book表
def index(request):
# 添加表记录
# 方式1:
book_obj = Book(id=1,title='xibushijie',state=True,pub_date="2018-7-15",price=1288,publish="Westworld")
# 插入数据
book_obj.save()
# 方式二 常用的方式
"""
数据库中的表 ----- python 中的 class
表中的记录 ------- 对象
记录中的字段 ------ 属性
"""
# 这种方式不需要写save他回自动调用这个函数
# 返回值是当前生成的记录!
book_obj = Book.objects.create(title='blackMirror',state=True,pub_date="2018-7-15",price=1288,publish="English")
print(book_obj.title)
return HttpResponse("OK")
测试:浏览器中输入
http://127.0.0.1:8000/index/
然后再相关数据库中查看数据!
3.单表操作-查询API
示例学习
ORM/urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index)
]
app01/views.py
from django.shortcuts import render,HttpResponse
from app01.models import Book # 自己创建的book表
def index(request):
"""准备示例数据
insert into app01_book(title,state,pub_date,price,publish) values
("python",1,"2018-07-15","1200","oldboy"),
("go",0,"2018-07-15","1200","oldboy"),
("linux",1,"2018-07-16","1211","luffycity"),
("java",0,"2018-07-15","1211","oldboy"),
("c++",1,"2018-07-16","1212","oldboy"),
("JavaScript",1,"2018-07-17","1200","oldboy")
;
"""
# ==================== 查询表记录 ==============
"""查询表记录重点关注两点
1.方法的返回值
2.方法的调用者
另外:都是调用的对象下的objects对象,然后调用相应方法
all first/last filter get 是常用的
values values_list distinct是非常重要的!
"""
# 1. all:返回值是querySet对象,QuerySet 是django自己创建的一种数据类型,列表的形式存贮对象
# 方法all()拿到所有的数据,如果重写了Book表下的__str__方法,会按照__str__方法显示:
# all()调用者是QuerySet,返回值是QuerySet对象
book_list = Book.objects.all()
print(book_list) # <QuerySet [<Book: xibushijie>, <Book: blackMirror>]>
for i in book_list:
print("价格:",i.price)
# 2. first,last方法 调用者:一个queryset数据类型对象即可,返回一个字段对象,model对象
book_first = Book.objects.all().first()
# 等同于Book.objects.all()[length(Book.objects.all())-1]
# 3. filter() 条件过滤 调用者:QuerySet对象,返回值:QuerySet对象,
# 由此,filter()之后可以调用first,last方法
book_filter = Book.objects.filter(price = 10,state=True)
book_filter_first = book_filter.first()
print(book_filter,book_filter_first) # <QuerySet []> None
# 4. get()方法 有且只有一个查询结果时才有意义,如果有多个或者没有会报错
# 返回值:model对象(一个记录)
book_get = Book.objects.get(title="blackMirror")
# 5. exclude() 排除法:调用者QueryS et, 返回:QuerySet
book_exclude = Book.objects.exclude(title="go")
# 6. order_by() 排序 调用者:QuerySet ,返回值:QuerySet
book_order_by = Book.objects.all().order_by("-id") # -id表示按照id降序排序,默认为升序排序
book_order_by = Book.objects.all().order_by("-id","price") # 根据多个字段排序
# 7. reverse() 反转
# 8. count() 计数 调用者:QuerySet 返回值:int
# 9. exists() 判断是否存在 返回值:Boolean
# 例如:Author.objects.filter(name=data["name"]).exists():
# 10. values() 方法!important 调用者:QuerySet ,返回一个ValueQuerySet——一个特殊的QuerySet,
# 运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
res = Book.objects.all().values("title")
print(res)
#<QuerySet [{'title': 'xibushijie'}, {'title': 'blackMirror'},...]>
# 11. values_list()
res = Book.objects.all().values_list("title",'state')
print(res) # <QuerySet [('xibushijie', True), ('blackMirror', True),..]
# 12. distinct(): 从返回结果中剔除重复纪录
# 只根据一个字段取值使用distinct去重才有意义!
book_distinct = Book.objects.all().values("title").distinct()
print(book_distinct)
return HttpResponse("OK")
app01/models.py
from django.db import models
# Create your models here.
# 利用类创建一个Book表 ,必须继承models.Model类
class Book(models.Model):
id = models.AutoField(primary_key=True,unique=True)
title = models.CharField(max_length=32)
state = models.BooleanField()
pub_date = models.DateField()
price = models.DecimalField(max_digits=8, decimal_places=2)
publish = models.CharField(max_length=32)
def __str__(self):
return self.title
4.单表查询--模糊查询
app01/views.py
from django.shortcuts import render,HttpResponse
from app01.models import Book # 自己创建的book表
def index(request):
# ===============模糊查询========================
# 大于
res = Book.objects.filter(price__gt = 10)
# 大于并小于等于一个值lt是小于
res = Book.objects.filter(price__gt=10,price__lt=200)
# 以什么开头
res = Book.objects.filter(title__startswith="p")
# 包含某个字符串
res = Book.objects.filter(title__contains="h")
# 忽略大小写的包含
res = Book.objects.filter(title__icontains='h')
# 多个条件
res = Book.objects.filter(price__in=[100,200,300])
# fanwei
res = Book.objects.filter(price__range=[100,200])
# 对于日期的格式的数据查找,必须是日期格式!
res = Book.objects.filter(pub_date__year=2018)
res = Book.objects.filter(pub_date__month=7)
#
print(res)
return HttpResponse("OK")
app01/models.py 与ORM/urls.py 代码相同!这里略
5.单表查询--删除与修改
app01/views.py
from django.shortcuts import render,HttpResponse
from app01.models import Book # 自己创建的book表
def index(request):
# ===============代表查询-删除、修改 ===============
# delete删除 调用者QuerySet 或者model对象,返回值:元组
# res = Book.objects.filter(price = 200).delete()
# res = Book.objects.filter(price = 200).first().delete()
# 修改 只能被QuerySet调用
res = Book.objects.filter(title="xibushijie").update(title="perl")
# print(res)
return HttpResponse("OK")
删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如:model_obj.delete()
你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。
例如,下面的代码将删除 pub_date 是2005年的 Entry 对象:
Entry.objects.filter(pub_date__year=2005).delete()
在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。如:
b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()
要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用:
Entry.objects.all().delete()
```
如果不想级联删除,可以设置为:
pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True)
update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。
app01/models.py 与ORM/urls.py 代码相同!这里略
---