我正在用sqlalchemy创建表.
user = Table('users', Metadata,
Column('datecreated', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP')),
Column('datemodified', TIMESTAMP,
server_onupdate=text('CURRENT_TIMESTAMP')),
)
Run Code Online (Sandbox Code Playgroud)
但是这不会设置DEFAULT ON UPDATE CURRENT_TIMESTAMP.
我查看这个链接, 你如何让SQLAlchemy在更新CURRENT_TIMESTAMP上覆盖MySQL,但是对于文字,我需要在create table definition中连接它.
Thx提前:)
Mar*_*tin 20
您可以劫持server_default以设置ON UPDATE:
Column('datemodified', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
Run Code Online (Sandbox Code Playgroud)
这会生成以下列条目:
datemodified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
但是,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)
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
Column('datecreated', TIMESTAMP)
Column('datemodified', TIMESTAMP,
server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
Run Code Online (Sandbox Code Playgroud)
为了在行的第一次输入期间将"datecreated"设置为当前时间,只需将其值显式设置为NULL.同样,来自http://dev.mysql.com/doc/refman/5.5/en/timestamp.html:
默认情况下,TIMESTAMP列为NOT NULL,不能包含NULL值,而赋值NULL则指定当前时间戳.
Mch*_*chl 12
如果您使用的是MySQL 5.6或更高版本,请向下滚动查看相关答案.旧版本的用户,请阅读本文.
直到MySQL 5.6.在一个表中,您只能有一个"自动"TIMESTAMP列.
来自:http://dev.mysql.com/doc/refman/5.5/en/timestamp.html
对于表中的一个TIMESTAMP列,您可以将当前时间戳指定为默认值和自动更新值.可以将当前时间戳作为初始化列,自动更新值或两者的默认值.当前时间戳不可能是一列的默认值和另一列的自动更新值.
这适用于 Mysql 8
sa.Column('created_at', sa.TIMESTAMP, server_default=func.now()),
sa.Column('updated_at', sa.TIMESTAMP, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
Run Code Online (Sandbox Code Playgroud)
由于某种原因,server_onupdate 选项不起作用。
from sqlalchemy.sql import func
Column('datemodified',
TIMESTAMP,
server_onupdate=text(
' ON UPDATE '.join([str(func.current_timestamp())] * 2)))
Run Code Online (Sandbox Code Playgroud)
这样您就可以使用 SQLAlchemy 的内部func.current_timestamp()函数。
| 归档时间: |
|
| 查看次数: |
15880 次 |
| 最近记录: |