我继承了一个较旧的数据库,该数据库设置为“更新时 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()
SQLAlchemy 不会尝试设置该字段,因为它认为该值尚未更改。
您可以通过在列上指定 onupdate 属性来告诉 SQLAlchemy 重新分配值:
Column('timestamp', ..., onupdate=literal_column('timestamp'))
这将导致 SQLAlchemy 自动添加timestamp=timestamp
所有更新查询。
如果您需要在实例上一次性执行此操作,您可以将列分配给它:
foo.timestamp = literal_column('timestamp')
# or
foo.timestamp = foo_tbl.c.timestamp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)