0

我正在尝试使用 Spyder 将 csv 格式导入 mysql,然后从 sql 数据中使用 pandas 绘制图形(这是一个工作项目)。

这是我的代码:

import mysql.connector,sys, pandas as pd

import mysql.connector
from mysql.connector import errorcode

df = pd.read_csv("Temperature.csv")

user,pw, host,db = 'user', '123','localhost','xyz'


cnx = mysql.connector.connect(user=user, password=pw, host=host, database=db,use_pure=True)
cursor = cnx.cursor()
for index, col in df.iterrows():

    data = {
       'year': col[0],
       'mean': col[1],
       'minimum': col[2],
       'maximum': col[3]

     }

### Make sure the code below is indented inside the for loop
    query = insert_stmt = ("INSERT INTO Temperature(year,mean, minimum, maximum)"
                            "VALUES (%(year)f, %(mean)f, %(minimum)f, %(maximum)f")

    cursor.execute(query, data) 
    print("Adding row " + str(index))
    cnx.commit() # Make sure data is committed to the database

    query1 = "SELECT * FROM rh_means_daily"
    cursor.execute(query)

但是我遇到了一条错误消息:

ProgrammingError: Failed processing pyformat-parameters; Python 'float64' cannot be converted to a MySQL type

我可以知道哪一部分出了问题吗?

谢谢。

4

1 回答 1

0

首先,您提取的数据可能是 Numpy64 数据类型存在问题。要在将数据输入字典时解决此问题,请执行以下操作以将其转换为普通的 Python 浮点数:

data = {
   'year': col[0],
   'mean': float(col[1]),
   'minimum': float(col[2]),
   'maximum': float(col[3])
 }

然后,您必须始终将 %s 用于字典字段,所以上面应该是:

insert_stmt = ("INSERT INTO Temperature(year,mean, minimum, maximum) VALUES (%(year)s, %(mean)s, %(minimum)s, %(maximum)s)")

更多详细信息请参见此处的官方文档:https ://pymysql.readthedocs.io/en/latest/modules/cursors.html#pymysql.cursors.Cursor.execute

于 2020-02-06T10:37:07.373 回答