【问题标题】:Python 'timestamp' cannot be converted to a MySQL typePython 'timestamp' 无法转换为 MySQL 类型
【发布时间】:2021-08-08 20:32:42
【问题描述】:

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

mysql.connector.errors.ProgrammingError:处理失败 格式参数; Python 'timestamp' 无法转换为 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) 部分失败

【问题讨论】:

  • 你试过使用df.to_sql吗?它应该能够处理这类问题。如果它有效,它甚至会比手动迭代数据帧并一遍又一遍地执行相同的查询更快
  • @DeepSpace 很棒!这行得通,而且确实好多了!谢谢

标签: python mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      相关资源
      最近更新 更多