mysql - 如何将来自不同 MQTT 主题的每个数据发送到不同列中的 Mysql 数据库
问题描述
我正在使用 python 设置一个新服务器以从云 MQTT 代理获取数据。我希望我的代码可以将多个数据从不同主题发送到 MYSQL DB,并且每个数据都放在不同的列中。但是,我的代码只有现在可以将数据发送到一列。如何解决?这是我的代码
enter code here
#!/usr/bin/env python 1
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import sys
import MySQLdb
# Koneksi ke database
try:
db = MySQLdb.connect("127.0.0.1","root","","mqtt")
except:
print("Failed to connect to Database")
print("Stop...")
sys.exit()
# Prepare cursor
cursor = db.cursor()
# The callback for when the client receives a CONNACK response from the
server.
def on_connect(client, userdata, flags, rc):
print("Connected: "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("Current_Temperatur")
client.subscribe("Current_Humidity")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
lista = msg.topic
sql = """INSERT INTO `mqtt`.`table` (`id`, `topic`, `sensor`, `date`)
VALUES (NULL, '""" + lista + """','""" + str(msg.payload) + """',
CURRENT_TIMESTAMP);"""
try:
# save to mySQL
cursor.execute(sql)
db.commit()
print("Save to Database ... OK")
except:
db.rollback()
print("Save to Database ... Failed")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
try:
client.connect("m16.cloudmqtt.com", 13959, 60)
except:
print("Couldn't connect to MQTT Broker...")
print("stop...")
sys.exit()
client.username_pw_set("asjsacsdjkc", "2121324352322")
try:
client.loop_forever()
except KeyboardInterrupt: #ctrl+C
print("Stop...")
db.close()
解决方案
推荐阅读
- postgresql - 如何在 postgreSQL 中填充集合
- xml - 使用Postgresql编写未格式化的字符串
- antd - 我们如何在 Form.create 中使用 OnSubmit 事件
- javascript - 如何从文件夹及其子文件夹中读取文件并写入 JSON 文件?
- c# - 在异步或同步操作中使用监视器锁
- c# - 陈旧元素和隐式等待
- android - Android 4.3:java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets
- ruby - Ruby 的 IO.copy_stream 不能与 readline 正确交互?
- firebase - 在带 Firebase 的 BigQuery 中滚动 7 天唯一身份和 31 天唯一身份
- javascript - Base64 图像不显示,除非硬编码或 setTimeout 设置为 0