我试图在MySQL数据库中以高精度(毫秒/微秒精度)声明<action android:name="android.intent.action.VIEW"/>
和create_time
。问题是我无法找到正确的语法/函数来运行这两个要求。
到目前为止的假设/挖掘:
update_time
(或DATETIME(fsp=6)
)TIMESTAMP(fsp=6)
为数据库设置默认server_default
以下是我正在设置的表格的精简版本:
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)'
(其中表达式是一个字符串...)
答案 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)