简述
Django自带的ORM框架操作数据库不需要直接书写SQL语句,类似Hibernate中的面向对象方式。
在这个app下创建一个usedb.py,在其中书写操作数据库的函数,然后在用户做特定的访问时去调用这个函数来测试。在同名子目录下的urls.py
中为这个新建的py文件注册路由:
from django.urls import path
# 导入要使用的app的view文件
from lzhapp import views
from lzhapp import usedb
urlpatterns = [
# 注释掉admin后台的路由
# path('admin/', admin.site.urls),
# 使用指定app的路由,指定正则和调用的函数
path(r'index/', views.index),
# 配置表单提交的路由
path(r'gosub/', views.gosub),
# 新加的操作数据库的路由
path(r'usedb/',usedb.testdb),
]
然后只要修改刚刚建立的usedb.py中的testdb函数,然后访问该路由指定的url,即
http://localhost:8000/usedb/
即可调用这个函数来操作数据库。
runoob上的Django教程似乎有些老了,虽然也是跟着这个教程学的,但是其中的部分包和用法都已经变了。
插入数据
修改测试文件代码:
# 要使用Http响应
from django.http import HttpResponse
# 要使用模型层的类
from lzhapp.models import UserInfo
def testdb(request):
# 创建模型层的对象
usrLzh = UserInfo(usr='lzh', pwd='123')
# 将该对象持久化到数据库
usrLzh.save()
return HttpResponse('添加完成')
页面可以看到输出,数据库中:
查询数据
先在数据库中插入几行数据:
修改测试文件代码:
# 要使用Http响应
from django.http import HttpResponse
# 要使用模型层的类
from lzhapp.models import UserInfo
def testdb(request):
# 获取所有数据行
allRowLst = UserInfo.objects.all()
print(allRowLst)
# 使用filter做条件过滤
testFltr = UserInfo.objects.filter(usr='lzh')
print(testFltr)
# 使用get获取单个对象
testGet = UserInfo.objects.get(pwd='123')
print(testGet)
# 排序
testOrdr = UserInfo.objects.order_by('pwd')
print(testOrdr)
return HttpResponse('查询测试完成')
最终控制台输出:
[29/Jun/2018 01:28:47] "GET / HTTP/1.1" 404 2136
<QuerySet [<UserInfo: UserInfo object (1)>, <UserInfo: UserInfo object (2)>, <UserInfo: UserInfo object (3)>]>
<QuerySet [<UserInfo: UserInfo object (1)>]>
[29/Jun/2018 01:28:50] "GET /usedb/ HTTP/1.1" 200 18
UserInfo object (1)
<QuerySet [<UserInfo: UserInfo object (1)>, <UserInfo: UserInfo object (3)>, <UserInfo: UserInfo object (2)>]>
总是穿插一些报错,不清楚什么意思。
更新数据
可以使用save()
方法或者update()
方法来更新数据。
save方式
修改测试文件代码:
# 要使用Http响应
from django.http import HttpResponse
# 要使用模型层的类
from lzhapp.models import UserInfo
def testdb(request):
# 获取一个已存在的id的模型类对象
usrLzh = UserInfo.objects.get(id=1)
# 修改其其它属性
usrLzh.pwd = '啊啊啊'
# save()
usrLzh.save()
return HttpResponse('更新测试完成')
数据库中:
update方式
修改测试文件代码:
# 要使用Http响应
from django.http import HttpResponse
# 要使用模型层的类
from lzhapp.models import UserInfo
def testdb(request):
# 获取一个或多个已存在的id的模型类对象的QuerySet,并调用其update方法
UserInfo.objects.all().update(pwd='123')
# 要使用filter而不是get,因为get返回的不是QuerySet
UserInfo.objects.filter(id=1).update(pwd='456')
return HttpResponse('更新测试完成')
数据库中:
删除数据
使用delete()
方法,该方法可以对一个模型类的object
对象使用,也可以对保存若干该对象的QuerySet
使用。
修改测试文件代码:
# 要使用Http响应
from django.http import HttpResponse
# 要使用模型层的类
from lzhapp.models import UserInfo
def testdb(request):
# 对QuerySet使用
UserInfo.objects.filter(id=1).delete()
# 对模型类的object使用
UserInfo.objects.get(id=2).delete()
# 要使用filter而不是get,因为get返回的不是QuerySet
return HttpResponse('删除测试完成')
数据库中: