上传AWS Lambda函数报错:Runtime.ImportModuleError,缺失mysql模块
问题解决:无法导入mysql模块并存储JSON数据到数据库
1. 修复"No module named 'mysql'"错误
这个错误是因为Python运行环境中缺少MySQL驱动包,常用的两个驱动包及安装命令如下:
- 安装
mysql-connector-python(官方驱动):pip install mysql-connector-python - 或者安装
pymysql(第三方驱动):pip install pymysql
如果是部署到云函数(如AWS Lambda),需将依赖包与代码打包上传,或使用云平台的依赖层功能管理第三方库。
2. 解析JSON并写入MySQL数据库
第一步:创建数据库表
先在MySQL中创建对应的数据表,示例表结构如下(可根据需求调整字段类型):
CREATE TABLE energy_data ( id INT AUTO_INCREMENT PRIMARY KEY, tensao DECIMAL(10,7), corrente DECIMAL(10,7), potencia DECIMAL(10,7), energia_consumida DECIMAL(10,7), frequencia DECIMAL(10,7), fator_potencia DECIMAL(10,7), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
第二步:Python代码实现数据存储
以下是使用mysql-connector-python的示例代码,替换配置信息后即可运行:
import mysql.connector import json # 数据库连接配置,替换为你的实际信息 db_config = { 'user': 'your_username', 'password': 'your_password', 'host': 'your_db_host', 'database': 'your_db_name', 'raise_on_warnings': True } # 待存储的JSON数据 raw_data = { "Tensão": {"isLosslessNumber": True, "value": "127.5999985"}, "Corrente": {"isLosslessNumber": True, "value": "0.02"}, "Potência": {"isLosslessNumber": True, "value": "0"}, "Energia Consumida": {"isLosslessNumber": True, "value": "0.189999998"}, "Frequência": {"isLosslessNumber": True, "value": "59.90000153"}, "Fator de Potência": {"isLosslessNumber": True, "value": "0"} } # 解析JSON,提取数值并转换为浮点型 processed_data = { 'tensao': float(raw_data['Tensão']['value']), 'corrente': float(raw_data['Corrente']['value']), 'potencia': float(raw_data['Potência']['value']), 'energia_consumida': float(raw_data['Energia Consumida']['value']), 'frequencia': float(raw_data['Frequência']['value']), 'fator_potencia': float(raw_data['Fator de Potência']['value']) } try: # 建立数据库连接 conn = mysql.connector.connect(**db_config) cursor = conn.cursor() # 插入数据SQL insert_sql = """ INSERT INTO energy_data (tensao, corrente, potencia, energia_consumida, frequencia, fator_potencia) VALUES (%(tensao)s, %(corrente)s, %(potencia)s, %(energia_consumida)s, %(frequencia)s, %(fator_potencia)s) """ # 执行插入并提交事务 cursor.execute(insert_sql, processed_data) conn.commit() print("数据已成功写入数据库") except mysql.connector.Error as e: print(f"数据库操作失败: {e}") conn.rollback() finally: # 关闭连接 if conn.is_connected(): cursor.close() conn.close() print("数据库连接已关闭")
注意事项
- 务必替换
db_config中的数据库用户名、密码、地址及库名为实际值 - 如果使用
pymysql,只需将mysql.connector替换为pymysql,其余操作逻辑基本一致 - 若JSON中的数值可能存在非数字情况,需添加额外的类型校验逻辑
内容的提问来源于stack exchange,提问作者VAPS41
相关产品推荐
相关产品推荐

