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
|