python - 你如何让 SQLAlchemy 覆盖 MySQL "on update CURRENT_TIMESTAMP"

标签 python mysql sqlalchemy

我继承了一个较旧的数据库,该数据库设置有一个“更新时 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

关于python - 你如何让 SQLAlchemy 覆盖 MySQL "on update CURRENT_TIMESTAMP",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450593/

相关文章:

Python-在保持前导零的同时将字符串转换为整数

python - 除了一个维度外,所有维度上的归约运算

python - 弃用警告 : Function when moving app (removed titlebar) - PySide6

mysql - 如何防止nodejs中的sql注入(inject)和 Sequelize ?

python - SQLAlchemy 在多线程应用程序中正确的 session 处理

Python SQLAlchemy : Data source name not found and no default driver specified

python - 如何以编程方式向交互式 Python 注入(inject)行?

PHP、Mysql聊天应用程序。我不知道

python - 在 Pyramid + sqlalchemy 应用程序的(基于 Selenium 的)功能测试中访问测试数据库

php - 使用 PHP mysql_connect 函数时绑定(bind)到特定的 ip 地址