首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库端如何声明默认的高精度日期时间默认值+使用mysql进行onupdate

数据库端如何声明默认的高精度日期时间默认值+使用mysql进行onupdate
EN

Stack Overflow用户
提问于 2017-11-23 15:19:40
回答 1查看 638关注 0票数 1

我试图在一个create_time数据库中使用高精度(毫升/微秒精度)来声明update_time和MySQL。问题是,我找不到正确的语法/函数来运行这两个需求。

迄今的假设/挖掘:

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

下面是我正在设置的表的简化版本:

代码语言:javascript
运行
复制
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)' (其中表达式是一个字符串.)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 22:34:29

由于一位同事提出了一个也是@终末暗示的建议,我对这两个问题都找到了一个很好的解决方案:

代码语言:javascript
运行
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47458722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档