前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。
django 操作mysql数据库
取数据:
1 from blog.models import SfhdPredictDataTest 2 w = SfhdPredictDataTest.objects.all().values('time') 3 4 print(w)
...: <QuerySet [{'time': 1470758979}, {'time': 1470758982}, {'time': 1470758985}, {'time': 1470758988}
...: , {'time': 1470758991}, {'time': 1470758994}, {'time': 1470758997}, {'time': 1470759000}, {'time'
...: : 1470759003}, {'time': 1470759006}, {'time': 1470759009}, {'time': 1470759012}, {'time': 1470759
...: 015}, {'time': 1470759018}, {'time': 1470759021}, {'time': 1470759024}, {'time': 1470759027}, {'t
...: ime': 1470759030}, {'time': 1470759033}, {'time': 1470759036}, '...
...:
' )
...:
...: <QuerySet [(1470758979, 351.844), (1470758982, 351.353), (1470758985, 350.851), (1470758988, 350.
...: 244), (1470758991, 350.052), (1470758994, 350.084), (1470758997, 350.122), (1470759000, 350.203),
...: (1470759003, 350.205), (1470759006, 350.208), (1470759009, 350.005), (1470759012, 349.716), (147
...: 0759015, 349.6), (1470759018, 349.612), (1470759021, 349.568), (1470759024, 349.421), (1470759027
...: , 349.114), (1470759030, 348.792), (1470759033, 348.751), (1470759036, 348.777), '...(remaining e
...: lements truncated)...']>
1.返回列表类型
1 lists = Chart.objects.values_list('time','predict') 2 3 list(lists)
2.返回字典类型
django引用app中的templates:
其中static为要加载的js,json文件
templates中加一个app的名字的文件夹,里面放html防止templates文件重名读错。
数据库访问
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(就这里我困了好久,一直以为是数据库没取到数据~~~~~)
这是我最近遇到的一些问题,和解决的方法,记我踩过的坑