[英]Send data to MySQL received from serial port
我在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
是什么,但是您可以簡單地輸入print(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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.