Here is the code:
import MySQLdb
from socket import *
import time
address = ( '192.168.1.177', 5000)
client_socket = socket(AF_INET, SOCK_DGRAM) #Set Up the Socket
client_socket.settimeout(30) # wait 30 seconds for a response
while(1): #Main Loop
data = "send" #Set data to Blue Command
client_socket.sendto(data, address) #send command to micro
rec_data, addr = client_socket.recvfrom(1024) #Read response from micro
print rec_data #Print the response from micro
sdata = rec_data.split(',') #csv string split
Vrms = 123.1 #float(sdata[0]) #
Irms = 213.45 #float(sdata[1])
RP = 10.1 #float(sdata[2])
AP = 1121.6 #float(sdata[3])
PF = 1.02 #float(sdata[4])
CPS = 60.41 #float(sdata[5])
UP = 1154.1 #float(sdata[6])
BV = 27.22 #float(sdata[7])
BI = 78.66 #float(sdata[8])
WI = 50.87 #float(sdata[9])
EI = 23.83 #float(sdata[10])
temp_BP = 78.2 #float(sdata[11])
gridOK = 1 #int(sdata[12])
genON = 0 #int(sdata[13])
genOK = 0 #int(sdata[14])
db = MySQLdb.connect("localhost","charlie","chab1541","PowerData")
c = db.cursor ()
c.execute("""INSERT INTO data
VALUES (%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %d, %d, %d )""",
(Vrms, Irms, RP, AP, PF, CPS, UP, BV, BI, WI, EI, temp_BP, gridOK, genON, genOK))
db.commit ()
c.close ()
db.close ()
Here is the error:
Traceback (most recent call last): File "C:/Users/Charlie/PycharmProjects/Read Store Power Data/PowerParser.py", line 41, in ( Vrms, Irms, RP, AP, PF, CPS, UP, BV, BI, WI, EI, temp_BP, gridOK, genON, genOK)) File "C:\\Python27\\lib\\site-packages\\MySQLdb\\cursors.py", line 183, in execute query = query % db.literal(args) TypeError: float argument required, not str
I can't seem to get rid of the float error. I commented out the parsed list of float conversions, thinking that was the problem-no joy. Of course, taking the var names out and hard-coding floats works.
I am missing something! Now have mind-mush... Please show me the error of my ways!
FIXED!
One needs to always use %s, no matter the actual type:
Changed code:
c.execute("""INSERT INTO data (Vrms, Irms, RP, AP, PF, CPS, UP, BV, BI, WI, EI, temp_BP, gridOK, genON, genOK)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )""",
(Vrms, Irms, RP, AP, PF, CPS, UP, BV, BI, WI, EI, temp_BP, gridOK, genON, genOK))
Found answer way down on Python MySQL Parameterized Queries
Thanks to all!
Use "%s" instead of "%f" and "%d" in your insert statement. MySQL knows the data type that corresponds to each table column when you create the table - that datatype specific to each field does not need to match the variable type passed in your insert statement. MySQL likes string inserts and will convert your inserts to the corresponding data type for the respective field.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.