sql >> データベース >  >> RDS >> Mysql

SqlAlchemyTIMESTAMP'更新時'追加

    どうやら、問題はSqlAlchemyに関連しているのではなく、基盤となるMySQLエンジンに関連しているようです。デフォルトの動作では、on update CURRENT_TIMESTAMPを設定します。 テーブルの最初のTIMESTAMP列にあります。

    この動作については、こちら で説明されています。 。私が理解している限り、考えられる解決策は、--explicit_defaults_for_timestamp=FALSEでMySQLを起動することです。 国旗。別の解決策は、ここ にあります。 。どちらの解決策もまだ試していません。問題が解決したらすぐにこの回答を更新します。

    編集:私は2番目の方法を試しましたが、あまり便利ではありませんが、機能します。私の場合、created_atを持たないテーブルのセットを作成しました 属性を入力してから、上記のリンクで説明されているように、残りのすべてのテーブルを変更しました。

    次のようなもの:

    _no_alter = set(['tables', 'which', 'do not', 'have', 'a created_at', 'column'])
    Base.metadata.create_all(engine)
    for table in Base.metadata.tables.keys():
        if table not in _no_alter:
          engine.execute(text('ALTER TABLE {} MODIFY created_at TIMESTAMP NOT NULL DEFAULT 0'.format(table)))
    

    EDIT2:これを実現する別の(より簡単な)方法は、SqlAlchemyでserver_defaultを設定することです。 列の値:

    created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False, server_default=text('0'))
    


    1. DelphiでのBDEとADO

    2. group by inを使用して、行のIDを返します

    3. ヘッダーはすでにフラッシュ機能を介して送信されていますか?

    4. MySQL:トリガーで区切り文字を使用するにはどうすればよいですか?