Python-Mysql NameError: global name 'save_to_db' is not defined
Python-Mysql NameError: global name 'save_to_db' is not defined
我尝试编写 python 脚本 mqtt,它从 Mosquitto 代理订阅数据,以获取来自在特定主题中发布数据的传感器的所有消息,并将数据发送到 mysqlDB 以保存数据
代码:
import paho.mqtt.client as mqtt
import MySQLdb
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("#")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
save_to_db(msg)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.0.132", 1883, 60)
client.loop_forever()
testdb = MySQLdb.connect("localhost","root","","testdb" )
def save_to_db(msg):
with testdb:
cursor = testdb.cursor()
try:
cursor.execute("INSERT INTO pulses (pulse) VALUES (%s)", (msg.payload))
except (MySQLdb.Error, MySQLdb.Warning) as e:
print('excepttion BD ' + e)
return None
但错误会显示:
Traceback (most recent call last):
File "sub3.py", line 16, in <module>
client.loop_forever()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1378, in loop_forever
rc = self.loop(timeout, max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 897, in loop
rc = self.loop_read(max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1177, in loop_read
rc = self._packet_read()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1766, in _packet_read
rc = self._packet_handle()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2239, in _packet_handle
return self._handle_publish()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2414, in _handle_publish
self._handle_on_message(message)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2574, in _handle_on_message
self.on_message(self, self._userdata, message)
File "sub3.py", line 10, in on_message
save_to_db(msg)
NameError: global name 'save_to_db' is not defined
你太早开始循环了:
client.loop_forever()
此行之后定义的任何代码尚未执行,因此尚未定义任何函数对象。
将该行向下移动到下方 循环运行时您需要存在的任何函数。
我尝试编写 python 脚本 mqtt,它从 Mosquitto 代理订阅数据,以获取来自在特定主题中发布数据的传感器的所有消息,并将数据发送到 mysqlDB 以保存数据
代码:
import paho.mqtt.client as mqtt
import MySQLdb
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("#")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
save_to_db(msg)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.0.132", 1883, 60)
client.loop_forever()
testdb = MySQLdb.connect("localhost","root","","testdb" )
def save_to_db(msg):
with testdb:
cursor = testdb.cursor()
try:
cursor.execute("INSERT INTO pulses (pulse) VALUES (%s)", (msg.payload))
except (MySQLdb.Error, MySQLdb.Warning) as e:
print('excepttion BD ' + e)
return None
但错误会显示:
Traceback (most recent call last):
File "sub3.py", line 16, in <module>
client.loop_forever()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1378, in loop_forever
rc = self.loop(timeout, max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 897, in loop
rc = self.loop_read(max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1177, in loop_read
rc = self._packet_read()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1766, in _packet_read
rc = self._packet_handle()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2239, in _packet_handle
return self._handle_publish()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2414, in _handle_publish
self._handle_on_message(message)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2574, in _handle_on_message
self.on_message(self, self._userdata, message)
File "sub3.py", line 10, in on_message
save_to_db(msg)
NameError: global name 'save_to_db' is not defined
你太早开始循环了:
client.loop_forever()
此行之后定义的任何代码尚未执行,因此尚未定义任何函数对象。
将该行向下移动到下方 循环运行时您需要存在的任何函数。