[django]orm增删改查
体现在一个融合性
orm操作环境模拟
class Book(models.Model):
name = models.CharField(max_length=30, verbose_name="书名")
price = models.IntegerField(verbose_name="价格")
pub_date = models.DateField(verbose_name="出版日期")
- 添加author字段 设置默认值
class Book(models.Model):
name = models.CharField(max_length=30, verbose_name="书名")
price = models.IntegerField(verbose_name="价格")
pub_date = models.DateField(verbose_name="出版日期")
author = models.CharField(max_length=40, null=False)
url设置
from django.views.generic import TemplateView
from app01 import views
urlpatterns = [
path('', TemplateView.as_view(template_name="index.html")),
path('addbook/', views.addbook, name="addbook"),
path('admin/', admin.site.urls),
]
app01/templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>book page</title>
</head>
<body>
<div class="content">
<p><a href="/addbook/">添加书籍</a></p>
<p><a href="/updatebook/">修改书籍</a></p>
<p><a href="/deletebook/">删除书籍</a></p>
</div>
</body>
</html>
创建一个表
- 方法1
from app01.models import Book
def addbook(request):
b = Book(name="python参考手册", price=99, author="mm", pub_date="2017-12-12")
b.save()
return render(request, "addbook.html")
- 方法2: 无需保存
def addbook(request):
Book.objects.create(name="python参考手册", price=99, author="mm", pub_date="2017-12-12")
return render(request, "addbook.html")
- 如果前端ajax传递过来是json(除非字段一一对应,否则报错)
Book.objects.create(**dict)
orm修改值
- 方法1: update批量修改
def updatebook(request):
Book.objects.filter(author="mm").update(price=9)
return HttpResponse("更新成功")
# 一条记录是一个实例 如果get到多条,会报错.
<class 'app01.models.Book'>
Book object (1)
- 方法2: get修改
def updatebook(request):
# Book.objects.filter(author="mm").update(price=9)
b = Book.objects.get(author = "mm")
b.price=22
b.save()
return HttpResponse("更新成功")
filter: 返回queryset
get: 返回一条记录, 可调用save()
1,批量修改
filter
1,返回值,返回值类型
<class 'django.db.models.query.QuerySet'>
<QuerySet [<Book: Book object (1)>]>
2,可以批量修改操作
2,get
1,确保库中只有一条
2,如果多条会报错
3,一条sql即一个实例
4,返回值和返回值类型
<class 'app01.models.Book'>
Book object (1)
update是queryset对方的方法, (生产用update,save方法不好)
get返回的是一个model对象, 用save操作,没有update方法
- 查看执行的sql: 感受update和save的区别
- 追加到settings.py里
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
删除接口
def delete(request):
Book.objects.filter(author="mm").delete()
return HttpResponse("删除成功")
查询api
了不起的双下划线
对应sql的like