python - 从串口接收到的数据发送到 MySQL
问题描述
我在python中有这段代码,它的作用是读取来自串口的数据;数据从一个 XBee 发送,另一个 XBee 接收,第二个 XBee 连接到计算机端口,它接收到的数据是我读取的,然后我尝试将此数据发送到 mysql 数据库,但我发送以下错误:
“MySQLdb._exceptions.ProgrammingError: %b 需要一个类似字节的对象,或者一个实现字节的对象,而不是'dict'”
代码:
import serial
from xbee import XBee
import MySQLdb
serial_port = serial.Serial('COM5', 9600)
xbee = XBee(serial_port)
while True:
try:
value = xbee.wait_read_frame()
sql_conn = MySQLdb.connect('localhost', 'root', 'pass', 'XBee')
cursor = sql_conn.cursor()
cursor.execute("INSERT INTO xbeedata (value) VALUES (%s)", (value))
data = cursor.fetchall()
cursor.close()
print (xbee.wait_read_frame())
except KeyboardInterrupt:
break
serial_port.close()
问候。
解决方案
您的代码存在一些问题:
您不需要每次都在循环中连接到您的 MySQL 数据库。
根据文档:
从这个库返回的信息是一个字典,格式如下:
{'id':str, 'param':binary data, ...}
id 字段始终是接收到的数据包类型的人类可读名称。所有后续字段,如上所示,带有键“param”,将二进制数据映射到接收到的数据帧中包含的每个可能字段。
所以这value
是一个字典类型,你需要使用param
你的有效数据的键。我不确定param
您的示例中的内容是什么,但您可以简单地输入 aprint(value)
并查看结果。如果您仍然坚持要添加value
到表中,则需要将其序列化为 JSON 字符串。
import serial
from xbee import XBee
import MySQLdb
import json
from pprint import pprint
serial_port = serial.Serial('COM5', 9600)
xbee = XBee(serial_port)
sql_conn = MySQLdb.connect('localhost', 'root', 'pass', 'XBee')
cursor = sql_conn.cursor()
while True:
try:
value = xbee.wait_read_frame()
if value:
pprint(value)
# Assumed results in 'rf_data' ('param') key
# the 'rf_data' is byte string so it is better to decode it first
cursor.execute(
"""INSERT INTO xbeedata (value) VALUES ('%s')""" % (value['rf_data'].decode()))
# or if you want to insert whole value
# cursor.execute(
# """INSERT INTO xbeedata (value) VALUES ('%s')""" % (json.dumps(value)))
sql_conn.commit()
except KeyboardInterrupt:
break
sql_conn.close()
serial_port.close()
推荐阅读
- sql - 如何从另一个表中获取总数
- c++ - 高效的二分搜索
- git - 如何忽略项目中的同名目录__pycache__?
- javascript - 如何将数据传递给 JQuery 脚本
- oracle - 将 timestamp(6) '31-DEC-99 12.00.00.000000000 AM' 转换为字符的问题
- python - 如果其他列值不符合条件,熊猫会更改列值
- java - java.lang.ClassNotFoundException:org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer
- c# - 为 Microsoft SQL Server 创建连接字符串
- node.js - 在 GAE 上将 MongoDB 连接到 NodeJS
- css - 如何强制此内容适合使用 Ionic 4 的 android 设备上的视图?