django1.11如何實時訪問mysql數據庫


前幾天,一直在研究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}, '...
    ...:
 1 w = SfhdPredictDataTest.objects.all().values_list('time','sample_model_predict_1)
 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)

 

 

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

 

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(就這里我困了好久,一直以為是數據庫沒取到數據~~~~~)

 這是我最近遇到的一些問題,和解決的方法, 記我踩過的坑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM