我的树莓派通过蓝牙从arduino接收传感器数据。我想在mysql中保存传感器数据。这是使用python的代码
#! /usr/bin/python
import bluetooth
import MySQLdb
bd_addr="(Mac address)"
port=1
sock=bluetooth.BluetoothSocket(bluetooth.RFOMM)
sock.connect((bd_addr.port)))
data=""
db=MySQLdb.connect("localhost", "user", "pwd", "db")
curs=db.cursor()
while 1:
try:
data +=sock.recv(1024)
data_end=data.fint('\n')
if data_end!=-1:
rec=data[:data_end+1:]
print data
data=data[data_end+1]
strQuery="INSERT INTO table (kg) VALUES ('+data')"
curs.execute(strQuery)
db.commit()
except KeyboardInterrupt:
break
sock.close()
db.close()
当我运行此代码时,我可以正确读取传感器数据,但是在mysql中 保存不同的数据。 如果我插入localhost / phpmyadmin并仅检查我的数据库' 0'是存在的。这是我的终端。我的问题是什么?
11.70
mysql.py:25: Warning: Incorrect doubl value: '+data' for column 'kg' at row 1 curs.execute(strQuery)
11.78
11.72
答案 0 :(得分:1)
您的Python应用程序将SQL语句INSERT INTO table (kg) VALUES ('+data')
发送到您的数据库,数据库将尝试将字符串+data
写入kg
列。
你们想要做什么:
strQuery="INSERT INTO table (kg) VALUES (" + str(data) + ")"
curs.execute(strQuery)
更好:
strQuery="INSERT INTO table (kg) VALUES ({})".format( data )
curs.execute(strQuery)
或者如果你想使用sql绑定:
strQuery="INSERT INTO table (kg) VALUES (?)"
curs.execute(strQuery, (data,)) # here you pass the value(s) as iterable parameter