Python MySQLdb 不正确的日期时间值 : '2018-03-25 02:00:02'

标签 python mysql datetime timezone dst

我在 Python 上使用 mysqlclient 包的 MySQLdb 时遇到这个错误。

_mysql_exceptions.OperationalError: 
(1292, "Incorrect datetime value: '2018-03-25 02:00:02' for column 'start' at row 1")

导致错误的代码:

conn.cursor.execute(query.format(table=table), 
(row['id'], row['type'], row['start'], row['end'],       
row['raw_xml'], row['id_parent'], row['rango']))

我可以正确插入其余的行,但是当我尝试插入这个日期时间对象时它崩溃了。

数据库中的字段是一个时间戳字段,它与其余的日期时间对象一起工作,但不知道为什么当它试图使该语句崩溃时。

提前致谢。

最佳答案

中欧时间在 2018-03-25 02:00 本地时间从标准时间切换为夏令时。

这很可能是标准时间到夏令时转换当天的时区转换错误。从 0200 到 0300 之前的小时不存在。您的时间值 2018-03-25 02:00:02 在欧洲中部时间不存在。

这会让你 2018-03-25 03:00:00

SET time_zone = 'Europe/Madrid';
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('2018-03-25 02:30'));

有了这个俗气的表定义:

CREATE TABLE timetest (
    id INT NOT NULL AUTO_INCREMENT,
    ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX `PK` (`id`)
);

运行此 INSERT 会得到不正确的 DATETIME 值错误。

INSERT INTO timetest (ts) VALUES ('2018-03-25 02:30');

但运行此 hack 工作正常并将 03:00 放入表中。

INSERT INTO timetest (ts) VALUES (FROM_UNIXTIME(UNIX_TIMESTAMP('2018-03-25 02:30')));

你最好的办法是弄清楚你是如何得出那个无效的日期/时间值的,然后改正你的错误。你的第二个最佳选择是这个 hack。

您还可以将 TIMESTAMP 列更改为 DATETIME 列,并以本地时间存储所有时间戳。

关于Python MySQLdb 不正确的日期时间值 : '2018-03-25 02:00:02' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610591/

相关文章:

python - 如何让pyttsx模块的语音变慢

php - MySQL 更新命令出错。 (在 PHP 中)

mysql - 如何在 Laravel eloquent 中获取同一记录每天、每周、每月和每年的最后更新值?

python - 将本地时间转换为祖鲁时间以便比较时间

json - 如何使用jq按日期时间字段排序?

Python : why doesn't a. pop() 修改链表(自定义链表类)

python - 在 except block 之后执行(部分)try block

python - 如何在 Python3 中使用 App Engine 安排 Cloud Datastore 导出

mysql - Heroku 的 Rails 数据库特定查询

python - 从 Pandas Dataframe 中每个 Id 的第一个时间戳中减去最后一个时间戳