前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。
1 from blog.models import SfhdPredictDataTest 2 w = SfhdPredictDataTest.objects.all().values('time') 3 4 print(w)
1 lists = Chart.objects.values_list('time','predict') 2 3 list(lists)
数据库访问
app.views的代码:主要是从数据库取数据,怎么达到实时呢,我是这样子的:反向查询数据库,(假设数据库的数据一直在插入)我们用切片切去反向后的表的前10个数据(我用的数据是3秒间隔的(三秒插入一次))。切片操作还有一个好处可以减少内存消耗,和加快查询速度,因为这张表本身很大且数据量巨大,列数达到130列,所以呢切片操作很适合。
怎么才能达到实时呢:我们在前端加一个ajax请求外面套一个定时器,定时间隔保证取得数据正好是插的数据量。
1 from django.shortcuts import render 2 from django.http import HttpResponse 3 # Create your views here. 4 from charts.models import Sfhd130Cols 5 import json,time 6 def index(request): 7 8 return render(request,'charts/index.html') 9 10 def charts_data(request): 11 # b = Sfhd130Cols.objects.all().order_by('-time').values('time', 'amb05cq04bm_av')[:100] 12 # 13 14 b = Sfhd130Cols.objects.order_by('-time').values('time', 'amb05cq04bm_av')[10:110] 15 b = b.reverse() #从数据库读取数据后 queryset格式要先倒序才能list列表化 16 b = list(b) 17 # print(b, "hello") 18 for lis in b: 19 lis['time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lis['time'])) 20 lists = json.dumps(b, indent=4) 21 22 23 # lis['time'] = time_change(lis['time']) 24 return HttpResponse(lists) 25 26 def charts_update(request): 27 b = Sfhd130Cols.objects.order_by('-time').values('time', 'amb05cq04bm_av')[:6] 28 # b = b.reverse() # 从数据库读取数据后 queryset格式要先倒序才能list列表化 29 b = list(b) 30 # print(b, "hello") 31 for lis in b: 32 lis['time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lis['time'])) 33 lists = json.dumps(b, indent=4) 34 35 return HttpResponse(lists) 36 #时间戳转时间 37 def time_change(date): 38 date = time.localtime(date) 39 return time.strftime('%Y-%m-%d %H:%M:%S',date)
还有一个重要的:当从数据库取出数据后是一个queryset类型,如果要倒序的话,要按照先reverse再list的操作,不然会得到空的list(就这里我困了好久,一直以为是数据库没取到数据~~~~~)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django1.11如何实时访问mysql数据库 - Python技术站