gpt4 book ai didi

mysql - 如何使用 sqlalchemy 在 mysql 中设置 DEFAULT ON UPDATE CURRENT_TIMESTAMP?

转载 作者:IT老高 更新时间:2023-10-29 00:13:47 31 4
gpt4 key购买 nike

我正在用 sqlalchemy 创建表。

user = Table('users', Metadata,
Column('datecreated', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP')),
Column('datemodified', TIMESTAMP,
server_onupdate=text('CURRENT_TIMESTAMP')),
)

但这不会设置 DEFAULT ON UPDATE CURRENT_TIMESTAMP

我 checkout How do you get SQLAlchemy to override MySQL "on update CURRENT_TIMESTAMP"但这对于文字来说我需要在创建表定义中连接它。

最佳答案

你可以劫持 server_default 来设置 ON UPDATE:

Column('datemodified', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))

这会生成以下列条目:

datemodified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

但是,Mchl 的回答仍然适用:一张表中只能有一个自动 TIMESTAMP 列 ( http://dev.mysql.com/doc/refman/5.5/en/timestamp.html )

另请注意,列的顺序很重要!如果您有一个没有 DEFAULT 和 ON UPDATE 修饰符的 TIMESTAMP 列,并且它是表中的第一个 TIMESTAMP 列,它会自动设置为 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。 (http://dev.mysql.com/doc/refman/5.5/en/timestamp.html)

所以这很好:

Column('datemodified', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
Column('datecreated', TIMESTAMP)

虽然这不是:

Column('datecreated', TIMESTAMP)
Column('datemodified', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))

为了在第一次输入一行时将“datecreated”设置为当前时间,只需将其值显式设置为 NULL。同样,来自 http://dev.mysql.com/doc/refman/5.5/en/timestamp.html :

By default, TIMESTAMP columns are NOT NULL, cannot contain NULL values, and assigning NULL assigns the current timestamp.

关于mysql - 如何使用 sqlalchemy 在 mysql 中设置 DEFAULT ON UPDATE CURRENT_TIMESTAMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992321/

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