70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from flask import Blueprint, jsonify, request, g
 | |
| import sqlite3
 | |
| from datetime import datetime, timedelta
 | |
| 
 | |
| bp = Blueprint('temperature', __name__, url_prefix='/temperature')
 | |
| 
 | |
| # 数据库连接函数 - 新增
 | |
| def get_db():
 | |
|     """获取数据库连接"""
 | |
|     if 'db' not in g:
 | |
|         g.db = sqlite3.connect(
 | |
|             'agriculture.db',  # 数据库文件名,请根据实际情况修改
 | |
|             detect_types=sqlite3.PARSE_DECLTYPES
 | |
|         )
 | |
|         g.db.row_factory = sqlite3.Row  # 使结果可以通过列名访问
 | |
|     return g.db
 | |
| 
 | |
| # 关闭数据库连接函数 - 新增
 | |
| def close_db(e=None):
 | |
|     """在请求结束时关闭数据库连接"""
 | |
|     db = g.pop('db', None)
 | |
|     if db is not None:
 | |
|         db.close()
 | |
| 
 | |
| # 其他API保持不变...
 | |
| 
 | |
| @bp.route('/daily/average', methods=['GET'])
 | |
| def get_daily_average_temperature():
 | |
|     try:
 | |
|         device_id = request.args.get('deviceId', type=int)
 | |
|         date = request.args.get('date')
 | |
| 
 | |
|         if not device_id or not date:
 | |
|             return jsonify({"success": False, "message": "缺少设备ID或日期参数"}), 400
 | |
| 
 | |
|         # 优化日期格式处理
 | |
|         start_date = f"{date} 00:00:00"
 | |
|         end_date = f"{date} 23:59:59"
 | |
| 
 | |
|         db = get_db()  # 使用正确的数据库连接函数
 | |
|         query = '''
 | |
|         SELECT 
 | |
|             AVG(temperature) as avg_temperature,
 | |
|             DATE(timestamp) as date
 | |
|         FROM temperature_data
 | |
|         WHERE device_id = ? 
 | |
|           AND timestamp BETWEEN ? AND ?
 | |
|         GROUP BY DATE(timestamp)
 | |
|         '''
 | |
|         result = db.execute(query, (device_id, start_date, end_date)).fetchone()
 | |
| 
 | |
|         if not result or result['avg_temperature'] is None:
 | |
|             return jsonify({"success": False, "message": "未找到指定日期的温度数据"}), 404
 | |
| 
 | |
|         response_data = {
 | |
|             "code": 200,
 | |
|             "data": {
 | |
|                 "temperatures": [float(result['avg_temperature'])],
 | |
|                 "dates": [result['date']]
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return jsonify(response_data)
 | |
| 
 | |
|     except sqlite3.OperationalError as oe:
 | |
|         return jsonify({"success": False, "message": f"数据库操作错误: {str(oe)}"}), 500
 | |
|     except sqlite3.Error as e:
 | |
|         return jsonify({"success": False, "message": f"数据库错误: {str(e)}"}), 500
 | |
|     except Exception as e:
 | |
|         return jsonify({"success": False, "message": f"服务器错误: {str(e)}"}), 500 | 
