【问题标题】:python mysql insert float variables errorpython mysql插入浮点变量错误
【发布时间】:2018-03-13 01:01:02
【问题描述】:

代码如下:

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

这是错误:

Traceback(最近一次调用最后一次): 文件“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) 类型错误:需要浮点参数,而不是 str

我似乎无法摆脱浮动错误。我注释掉了浮点转换的解析列表,认为这是问题所在——没有乐趣。当然,去掉 var 名称并硬编码浮点数是可行的。

我错过了一些东西!现在有头脑糊... 请告诉我我的方法的错误!

【问题讨论】:

    标签: python mysql variables insert


    【解决方案1】:

    已修复!

    无论实际类型如何,都需要始终使用 %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 Parameterized Queries找到答案

    谢谢大家!

    【讨论】:

    • 感谢 nat5142!找了好久!!
    【解决方案2】:

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

    【讨论】:

    • MySQL 也会兴高采烈地将应该是字符串的内容转换为 0.0,如果你不小心的话,会造成严重的混乱。正确的绑定应该解决问题,但这取决于拥有干净的数据。垃圾进,垃圾出。
    猜你喜欢
    • 2016-07-30
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多