gpt4 book ai didi

python - mysql 和 Python : does not allow two timestamp columns

转载 作者:行者123 更新时间:2023-11-29 00:12:12 26 4
gpt4 key购买 nike

我在使用 Python、MySQL 和创建包含两个时间戳列的表时遇到问题。

通过 Python 和使用 MySQLDB 执行以下 SQL:

CREATE TABLE test_db.test_with_two_datetime_columns (
`first_datetime_field` TIMESTAMP(6) NOT NULL DEFAULT 0,
`second_datetime_field` TIMESTAMP(6) NOT NULL DEFAULT 0
) ENGINE=InnoDB

我收到错误 (1067,'first_datetime_field' 的默认值无效),而我可以在 MySQL CLI 中轻松触发以下相等命令:

$ mysql -h localhost

> CREATE TABLE test_db.test_with_two_datetime_columns (
`first_datetime_field` TIMESTAMP(6) NOT NULL DEFAULT 0,
`second_datetime_field` TIMESTAMP(6) NOT NULL DEFAULT 0
) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)

类似地,通过 Sequel Pro,上述命令执行良好。

所以我猜问题出在 MySQLDB(又名。MySQL-Python),但这看起来很奇怪

我正在使用 MySQL 5.6.17MySQL-Python 1.2.5Python 2.7

最佳答案

我使用来自 https://stackoverflow.com/a/22860449/1362628 的想法解决了这个问题,通过将默认值更改为 null 并允许条目为 null

CREATE TABLE test_db.test_with_two_datetime_columns (
`first_datetime_field` TIMESTAMP(6) NULL DEFAULT NULL,
`second_datetime_field` TIMESTAMP(6) NULL DEFAULT NULL
) ENGINE=InnoDB""")

现在它工作正常。但问题是,这些字段都不能参与 primary key,因为它们可以包含 null


更新

事实证明,使用 SELECT @@session.sql_mode 我发现 MySQLDB 上的包装器代码将 sql_mode 设置为 TRADITIONALTRADITIONAL 扩展为 STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, TRADITIONAL, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION,其中NOO_ZERO_IN_DATE<_ZERO_DATE>ER > 使出现上述错误。不过从长远来看,我更倾向于上述解决方案,将不存在的值表示为 null。

关于python - mysql 和 Python : does not allow two timestamp columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com