2017-11-23 19 views
0

create_timeupdate_timeをMySQLデータベースで高精度(ミリ秒/マイクロ秒精度)で宣言しようとしています。問題は、これらの2つの要件を実行するための正しい構文/関数を見つけることができないことです。私はMySQLは私がデータベースの引数server_defaultを使用する必要がMySQLの方言DATETIME(fsp=6)(またはTIMESTAMP(fsp=6)データベース側で、デフォルトの高精度datetimeを宣言する方法mysqlを使用したデフォルトの更新+

  • を使用するため、高精度のdatetimeのための唯一の方法を見つけた

    1. :これまで掘り

      仮定/セットのデフォルト私はここで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/ja/latest/core/metadata.html#sqlalchemy.schema.Column.params)のように 'text'関数を試したことがありますか? .server_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) 
    
    関連する問題