파이썬으로 센서값을 strquery로 mysql에 저장하고 싶은데 터미널에서는 센서값이 출력되는데 mysql에는 '0'만 저장되는거 어떻게 해결할 수 있나요?

아두이노에서 측정한 센서값을 블루투스로 라즈베리파이에 전송하고 라즈베리파이는 파이썬으로 센서값을 받고 mysql에 저장하려 합니다. 질문과 같이 파이선 파일을 터미널에서 실행할 때 터미널에는 센서 값이 정상적으로 출력되지만 크롬에서 localhost/phpmyadmin 에 접속하여 저장된 데이터베이스를 확인하면 0밖에 저장이 되어있지 않습니다. 뭐가 문제일까요? 다음은 파이선 코드입니다.

import bluetooth

import MySQLdb

bd_addr="00:21:13:01:5B:65"

port=1

sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)

sock.connect((bd_addr,port))

data=""

db=MySQLdb.connect("localhost", "root", "1234", "testdb")

curs=db.cursor()

print 'Start Monitor'

while 1:

try:
    data +=sock.recv(1024)
    data_end=data.find('\n')
    if data_end!=-1:
        rec=data[:data_end+1:]
        print data
        data=data[data_end+1:]
        strQuery="INSERT INTO weight (kg) VALUES('+data')"
        curs.execute(strQuery,)
        db.commit()
except KeyboardInterrupt:
    break

sock.close() db.close()

그리고 터미널에는 다음과 같이 에러가 떠요 ㅠㅠ

Warning: Incorrect double value: '+ data ' for column 'kg' at row 1 curs.execute(strQuery)

1답변

  • strQuery="INSERT INTO weight (kg) VALUES('+data')"
    

    문자열이 제대로 닫히지 않았네요. " 로 열었다면 "로 닫아줘야합니다.
    문자열 연결 연산자 + 도 하나 부족하구요.

    strQuery="INSERT INTO weight (kg) VALUES(" + data + ")"
    

    위와 같이 수정하면 될 듯 합니다.

    • colum count doesn't match value count at row 1이라는 에러가 뜨는데 무슨 에러인가요? ㅠㅠ 김진수 2018.3.29 19:35
    • 삽입 쿼리 확인 해 보세요. 삽입이 명시된 컬럼과 실제 넣는 데이터 갯수가 달라서 나는 에러 아닌가 싶네요 DaeSung Park 2018.3.29 21:47

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.