繁体   English   中英

Python MySQL插入浮动变量错误

[英]python mysql insert float variables error

这是代码:

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 ()

这是错误:

追溯(最近一次通话):文件“ C:/ Users / Charlie / PycharmProjects / Read Store Power Data / PowerParser.py”,第41行,位于(Vrms,Irms,RP,AP,PF,CPS,UP,BV, BI,WI,EI,temp_BP,gridOK,genON,genOK))文件“ C:\\ Python27 \\ lib \\ site-packages \\ MySQLdb \\ cursors.py”,行183,在执行查询=查询%db.literal(args) TypeError:需要float参数,而不是str

我似乎无法摆脱浮动错误。 我注释掉已解析的float转换列表,以为那不是问题,没有乐趣。 当然,删除var名称并进行硬编码浮点型是可行的。

我缺少什么! 现在请注意...请告诉我我的方式的错误!

固定!

无论实际类型如何,都需要始终使用%s:

更改的代码:

    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))

Python MySQL参数化查询中找到答案

谢谢大家!

在插入语句中使用“%s”而不是“%f”和“%d”。 创建表时,MySQL知道与每个表列对应的数据类型-特定于每个字段的数据类型不需要与在insert语句中传递的变量类型匹配。 MySQL喜欢字符串插入,并将您的插入转换为相应字段的相应数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM