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

时间:2017-11-23 15:19:41

标签: python mysql datetime sqlalchemy

我试图在MySQL数据库中以高精度(毫秒/微秒精度)声明<action android:name="android.intent.action.VIEW"/> create_time。问题是我无法找到正确的语法/函数来运行这两个要求。

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

  1. 我发现MySQL的高精度日期时间使用mysql方言update_time(或DATETIME(fsp=6)
  2. 的唯一方法
  3. 我需要使用参数TIMESTAMP(fsp=6)为数据库设置默认
  4. 我不确定如何设置server_default
  5. 以下是我正在设置的表格的精简版本:

    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)'(其中表达式是一个字符串...)

1 个答案:

答案 0 :(得分:2)

感谢一位同事提出了@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)