2017-11-23 1 views
0

create_timeupdate_time을 MySQL 데이터베이스에서 고정밀 (밀리 초/초 정밀도)로 선언하려고합니다. 문제는 두 가지 요구 사항을 실행하기 위해 올바른 구문/함수를 찾을 수 없다는 것입니다. 내가 MySQL은 I가 데이터베이스에 대한 인수 server_default를 사용할 필요가 MySQL의 방언 DATETIME(fsp=6) (또는 TIMESTAMP(fsp=6)) 데이터베이스 쪽에서 기본 고정밀 datetime을 선언하는 방법 mysql을 사용하는 onupdate를 사용하는 경우

  • 을 사용하기위한 고정밀 날짜 수있는 유일한 방법을 발견했습니다

    1. : 지금까지 파고

      가정/설정 기본

    2. 내가 설정하는 방법을 잘 모르겠어요 여기 ON UPDATE NOW(6)

    테이블 I의 버전을 박탈이다 설정입니다 :

    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) 
    

    func.now()create_time DATETIME(6) NOT NULL DEFAULT now()에 직렬화하지만 나는 또한 간단한 server_default='NOW(6)'을 시도한 ...now(6)

    할 필요가 있지만, 그 (create_time TIMESTAMP(6) NOT NULL DEFAULT 'now(6)'로 변환으로 내가 Invalid default value for 'create_time' 받기를 실행 여기서 표현식은 문자열입니다 ...)

  • +1

    [docs] (http://docs.sqlalchemy.org/ko/latest/core/metadata.html#sqlalchemy.schema.Column.params)의 예와 같이'text' 함수를 사용해 보셨습니까? . 서버 _default)? – Terminus

    답변

    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) 
    
    관련 문제