ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配

Posted

技术标签:

【中文标题】ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配【英文标题】:ValueError: time data '0' does not match format '%d/%m/%Y'ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配 【发布时间】:2018-03-18 07:57:18 【问题描述】:

我正在尝试从 CSV 文件插入 mysql,文件中的第一个“列”是这种格式的日期:

    31/08/2017;

那么我在表中的列设置为YYYY-MM-DD

这是我的代码:

    import datetime
    import csv
    import MySQLdb
    ...
    insertionSQL="INSERT INTO transactions (trans_date, trans_desc, trans_amnt) VALUES(" + datetime.datetime.strptime('0', '%d/%m/%Y').strftime('%Y-%m-%d') + ",2,3), row)"
    cur.execute(insertionSQL)

我的 python 脚本出现以下错误:

    (data_string, format))
    ValueError: time data '0' does not match format '%d/%m/%Y'

【问题讨论】:

好的。首先,这似乎与 MySQL 无关,因为datetime.datetime.strptime('0', '%d/%m/%Y') 给出了警告。 你应该格式化字符串,即'0'.format(your_date_string)。 【参考方案1】:

我发现了问题。我错过了分隔符 =“;”所以csv阅读器将整行作为一个值

【讨论】:

【参考方案2】:

您应该在查询执行期间执行日期格式化逻辑。您不能只将逻辑放在插入查询字符串中并期望它起作用(如您所见,strptime 正在尝试根据日期格式字符串将字符串 0 转换为日期对象,这显然不能工作!)

    insertionSQL = "INSERT INTO transactions (trans_date, trans_desc, trans_amnt) VALUES(%s, %s, %s)"
    ... # read csv
    # Reformat the date on the actual data from the CSV!
    csv_date = datetime.datetime.strptime(csv_date, '%d/%m/%Y').strftime('%Y-%m-%d')
    # Now all of your input data is formatted correctly, execute the prepared statement.
    cursor.execute(insertionSQL, (csv_date, csv_desc, csv_amnt))

【讨论】:

以上是关于ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: 时间数据 '' 与格式 '%Y-%m-%d %H:%M' 不匹配

ValueError:时间数据 'LEGACY SYSTEM' 与格式 '%H:%M:%S' 不匹配

ValueError:时间数据'2018-12-22T00:41:30.926932Z'格式'%Y-%m-%d%H:%M:%S'[重复]

to_datetime - ValueError:时间数据'31/03/21 00'与格式'dd/mm/YY HH'不匹配(匹配)[重复]

ValueError:格式错误的节点或字符串:Pandas 中的 0 [重复]

ValueError:数组不能包含 infs 或 NaNs