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

     这是我最近遇到的一些问题,和解决的方法,记我踩过的坑
  • 相关阅读:
    [国嵌攻略][097][U-Boot新手入门]
    [国嵌攻略][070-095][Linux编程函数手册]
    自己写的切图工具(转)
    【总结整理】关于切图
    【总结整理】冯诺依曼体系结构
    【总结整理】面试需了解
    【总结整理】如何解决跨域问题
    【总结整理】WebGIS基础
    【总结整理】空间数据库基础
    【总结整理】WMS、WMTS、WFS
  • 原文地址:https://www.cnblogs.com/BigStupid/p/8033763.html
Copyright © 2020-2023  润新知