python mysql insert float variables error
Solution 1
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!
Solution 2
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.
Charlie
Updated on June 04, 2022Comments
-
Charlie almost 2 years
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!