我继承了一个较旧的数据库,该数据库设置了一个"on update 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()
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
foo = session.query(f).get(int(1))
setattr(foo, 'timestamp', foo.timestamp)
setattr(foo, 'bar', bar)
www_model.www_Session.commit()
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy不会尝试设置该字段,因为它认为该值未更改.
您可以通过在列上指定onupdate属性来告诉SQLAlchemy重新分配值:
Column('timestamp', ..., onupdate=literal_column('timestamp'))
Run Code Online (Sandbox Code Playgroud)
这将导致SQLAlchemy自动添加timestamp=timestamp
到所有更新查询.
如果您需要在实例上执行一次,则可以为其分配列:
foo.timestamp = literal_column('timestamp')
# or
foo.timestamp = foo_tbl.c.timestamp
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2377 次 |
最近记录: |