Эх сурвалжийг харах

智能插座开关日志原生SQL查询

zhangdongming 1 жил өмнө
parent
commit
a1aea8fcad

+ 30 - 16
Controller/SensorGateway/SmartSocketController.py

@@ -13,7 +13,7 @@ import time
 
 
 import requests
 import requests
 from dateutil.parser import parse
 from dateutil.parser import parse
-from django.db import transaction
+from django.db import transaction, connection, connections
 from django.db.models import Sum, Count
 from django.db.models import Sum, Count
 from django.http import QueryDict
 from django.http import QueryDict
 from django.views import View
 from django.views import View
@@ -578,25 +578,39 @@ class SmartSocketView(View):
         page, size = int(page), int(size)
         page, size = int(page), int(size)
 
 
         try:
         try:
-            scene_log_qs = SceneLog.objects.filter(device_id=serial_number).values('tasks', 'status',
-                                                                                   'created_time')
-            if startTime is None and endTime is None:
-                scene_log_qs = scene_log_qs.order_by('-created_time')[(page - 1) * size:page * size]
-                if not scene_log_qs.exists():
-                    return response.json(0, [])
+            sql_query = """
+                        SELECT DISTINCT 
+                            tasks,
+                            status,
+                            created_time
+                        FROM scene_log
+                        WHERE device_id = %s {}
+                        ORDER BY created_time,id DESC
+                        LIMIT %s, %s;
+                    """
+
+            params = [serial_number]
+
+            if startTime is not None and endTime is not None:
+                sql_query = sql_query.format(
+                    "AND created_time >= %s AND created_time < %s ")
+                params.extend([startTime, endTime])
             else:
             else:
-                scene_log_qs = scene_log_qs.filter(device_id=serial_number, created_time__gte=startTime,
-                                                   created_time__lt=endTime).order_by(
-                    '-created_time', '-id')[(page - 1) * size:page * size]
-                if not scene_log_qs.exists():
-                    return response.json(0, [])
+                sql_query = sql_query.format(" ")
+            params.extend([(page - 1) * size, size])
+            cursor = connections['mysql02'].cursor()
+            cursor.execute(sql_query, params)
+            results = cursor.fetchall()
+            # 关闭游标
+            cursor.close()
+            connections.close_all()
             log_list = []
             log_list = []
-            for scene_log in scene_log_qs:
+            for result in results:
                 data = {
                 data = {
                     'serialNumber': serial_number,
                     'serialNumber': serial_number,
-                    'tasks': scene_log['tasks'] if scene_log['tasks'] else '',
-                    'status': scene_log['status'],
-                    'createdTime': scene_log['created_time'],
+                    'tasks': result[0] if result[0] else '',
+                    'status': result[1],
+                    'createdTime': result[2],
                 }
                 }
                 log_list.append(data)
                 log_list.append(data)
             return response.json(0, log_list)
             return response.json(0, log_list)