【问题标题】:How do you get SQLAlchemy to override MySQL "on update CURRENT_TIMESTAMP"你如何让 SQLAlchemy 在“更新 CURRENT_TIMESTAMP”时覆盖 MySQL
【发布时间】:2010-03-15 21:22:41
【问题描述】:

我继承了一个较旧的数据库,该数据库设置为“更新时 CURRENT_TIMESTAMP”,该字段应仅描述项目的创建。使用 PHP,我一直在 UPDATE 子句中使用“timestamp=timestamp”,但在 SQLAlchemy 中,我似乎无法强制系统使用设置的时间戳。

我是否别无选择,需要更新 MySQL 表(数百万行)?

foo = session.query(f).get(int(1))
ts = foo.timestamp
setattr(foo, 'timestamp', ts)
setattr(foo, 'bar', bar)
www_model.www_Session.commit()

我也试过了:

foo = session.query(f).get(int(1))
setattr(foo, 'timestamp', foo.timestamp)
setattr(foo, 'bar', bar)
www_model.www_Session.commit()

【问题讨论】:

    标签: python mysql sqlalchemy


    【解决方案1】:

    SQLAlchemy 不会尝试设置字段,因为它认为值没有改变。

    您可以通过在 Column 上指定 onupdate 属性来告诉 SQLAlchemy 重新分配值:

     Column('timestamp', ..., onupdate=literal_column('timestamp'))
    

    这将导致 SQLAlchemy 自动将timestamp=timestamp 添加到所有更新查询中。

    如果您需要在一个实例上一次性完成,您可以将列分配给它:

    foo.timestamp = literal_column('timestamp')
    # or 
    foo.timestamp = foo_tbl.c.timestamp
    

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 2012-12-30
      • 2011-07-31
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多