gpt4 book ai didi

python - 如何使用mysql在数据库端声明默认高精度日期时间default + onupdate

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

我试图声明 create_timeupdate_time MySQL 数据库中具有高精度(毫秒/微秒精度)。问题是我找不到正确的语法/函数来运行这两个要求。

到目前为止的假设/挖掘:

  1. 我找到了MySQL使用mysql方言实现高精度日期时间的唯一方法 DATETIME(fsp=6) (或TIMESTAMP(fsp=6))
  2. 我需要使用参数 server_default为数据库设置默认值
  3. 我不知道如何设置ON UPDATE NOW(6)

这是我正在设置的表格的精简版本:

from datetime import datetime

from sqlalchemy.dialects.mysql import DATETIME
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import func


def create_declarative_base():
base = declarative_base()
base.__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8',
}
return base

Base = create_declarative_base()


class CreateUpdateTable(Base):
__tablename__ = 'create_update_table'
create_time = Column(DATETIME(fsp=6), server_default=func.now(), nullable=False)
update_time = Column(DATETIME(fsp=6), server_default=func.now(), onupdate=datetime.utcnow, nullable=False)

运行此命令时,我得到 Invalid default value for 'create_time'作为 func.now()序列化为create_time DATETIME(6) NOT NULL DEFAULT now()但它需要是 ...now(6)

我也尝试过做一个简单的 server_default='NOW(6)'但这意味着 create_time TIMESTAMP(6) NOT NULL DEFAULT 'now(6)' (其中表达式是一个字符串...)

最佳答案

感谢一位同事提出的建议,也@Terminus暗示过,我对这两个问题都有一个很好的解决方案:

from datetime import datetime


from sqlalchemy import text
from sqlalchemy.dialects.mysql import DATETIME
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import func


def create_declarative_base():
base = declarative_base()
base.__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8',
}
return base

Base = create_declarative_base()


class CreateUpdateTable(Base):
__tablename__ = 'create_update_table'
create_time = Column(DATETIME(fsp=6), server_default=text('CURRENT_TIMESTAMP(6)'), nullable=False)
update_time = Column(DATETIME(fsp=6), server_default=text('CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)'), nullable=False)

关于python - 如何使用mysql在数据库端声明默认高精度日期时间default + onupdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458722/

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