Python'时间戳'不能转换成MySQL类型

时间:2018-10-30 10:40:52

标签: python mysql

我在Excel中有一些要插入MySQL表的数据。 我将Excel读入了Dataframe。 数据包括一个带有日期的date列,我将其转换为datetime以匹配MySQL表设置(date列的类型为datetime)。 当我尝试将数据插入表时,出现错误:

  

mysql.connector.errors.ProgrammingError:处理失败   格式参数Python“时间戳”无法转换为MySQL   输入

当我在转换日期后打印出日期时,是否以“ YYYY-MM-DD HH:MM:SS”格式获得它,这似乎是MySQL要求的格式?

  

2011-05-10 00:00:00

可能是做一些简单的错误,但无法使它正常工作。有什么建议吗?

表的SQL:

CREATE TABLE `Weight` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Date` datetime NOT NULL,
 `Weight` float NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_c

我的Python脚本,进行了一些扩展以合并一些虚拟数据:

import pandas as pd
import mysql.connector
import numpy as np

#import csv in dataframe
#df = pd.read_excel('/excel.xlsx')
#dataframe for this question on stackoverflow
startDate = '2011-05-03'
dateList = pd.date_range(startDate, periods=1000).tolist()
df = pd.DataFrame({'Day': dateList,
                'Weight': np.random.normal(loc=68, scale=10, size=(1000,))
              })
df['Day'] = pd.to_datetime(df['Day'],errors='raise')

mydb = mysql.connector.connect(
    host="host",
    user="user",
    port="port",
    passwd="Password",
    database="database_name"
)

mycursor = mydb.cursor()
sql = "INSERT INTO Weight (Date, Weight) values (%s, %s)"

for index, row in df.iterrows() :
    val = (row['Day'], row['Weight'])
    mycursor.execute(sql, val)

要清楚,它在 execute(sql,val)部分失败

2 个答案:

答案 0 :(得分:0)

按照@DeepSpace的建议使用df.to_sql解决了该问题。

答案 1 :(得分:0)

另一种更简单的方法是将日期格式替换为 excel 文件中的文本。 使用查找/替换: 发现:2011 替换:'2011