前几天,一直在研究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}, '...
    ...:
' )
 print(w)
 
    ...:
 
    ...: <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)

 

django1.11如何实时访问mysql数据库

 

2.返回字典类型
 1 lists = Chart.objects.values('time','predict') 
   list(lists)r2 
 

 

django引用app中的templates:
 
其中static为要加载的js,json文件
templates中加一个app的名字的文件夹,里面放html防止templates文件重名读错。
 
django1.11如何实时访问mysql数据库

 

数据库访问

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(就这里我困了好久,一直以为是数据库没取到数据~~~~~)

 这是我最近遇到的一些问题,和解决的方法,记我踩过的坑