2016-05-22 50 views
1

我使用的傳感器連接到arduino並使用ser.readline()打印來自傳感器和成功的讀數。但是當我想使用ser.readline將讀取值發送到mysql。它只傳遞設備名稱和當前時間,並且在mysql中顯示的讀數值爲'0'。在這裏我的編碼。爲什麼ser.readline數據不會出現在mysql中?

import time 
import serial 
import smtplib 
import datetime 
import MySQLdb 

db = MySQLdb.connect("192.168.0.103", "fyp", "123456", "system") 
ser = serial.Serial('/dev/ttyACM0', 9600) 

while True: 
     api = ser.readline() 
     current_time = datetime.datetime.now() 
     print (api) 

     sql = "INSERT INTO reading (series_no, time, api) VALUES ('test1', current_time, api)" 
     data = (current_time, api) 
     cur.execute(sql) 

db.close() 

使用%s也不行。先謝謝你。

回答

1

您沒有正確參數化查詢。幾件事情來解決:

  • 添加佔位符的查詢參數 - %s,沒有引號
  • 通過data元組​​
  • 提交事務

修正版本:

sql = "INSERT INTO reading (series_no, time, api) VALUES ('test1', %s, %s)" 
data = (current_time, api) 
cur.execute(sql, data) 
db.commit() 
+0

它的工作原理,謝謝。但爲什麼起初它說'警告:數據從列'api'在第一行被截斷' – Hazim

+0

@Hazim讓我們來看看「api」的值是什麼以及「api」表的列類型是什麼?謝謝。 – alecxe

+0

我不太確定我的api價值。但它打印'25,28',所以我只是假設它是表列中的整數。 – Hazim

相關問題