mysql - Flask Sqlalchemy 如何在更新行时不自动更新 TIMSTAMP 列
问题描述
我有一个模型:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
password = db.Column(db.String, nullable=False)
created_time = db.Column(db.TIMESTAMP, nullable=False)
但是,每次我更新name
orpassword
时,时间戳created_time
都会更新,但我不想created_time
更新。
# the way I update a user's info
class UserController(Resource):
def get(self):
user = User.query.filter_by(id=1).first() # a user had been created before
user.name = "new_name"
db.session.commit()
# as of here, not only `name` but also `created_time` will be update
created_time
更新行时如何停止自动更新?
编辑 1
更准确地说,我想了解 的机制db.TIMESTAMP
,更具体地说,是为了解决当我更新行中的其他列时db.TIMESTAMP
也会更新的问题。
相反,我希望在db.TIMESTAMP
创建行时固定列中的值,并且无论其他列中的值如何更改,该值都不应更改。
PS为了避免误解,我知道TIMESTAMP
可能不是最适合created_time
列的类型,但上面的代码仅用于说明目的。
解决方案
好吧,据我了解,导致您的问题的 on_update 事件触发器不是默认值,并且不应该在没有明确告知的情况下生成它。
查看更多:标记隐式生成的值、时间戳和触发列
创建创建/修改时间戳的理想方法是这样的
class Base():
id = db.Column(db.Integer, primary_key=True)
created_time = db.Column(db.DateTime, server_default=db.func.now())
modified_time = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
在这里,我找到了很好的参考资料,可以帮助您解决问题。 默认情况下,如何阻止 SQLAlchemy 将 ON UPDATE 子句添加到 TIMESTAMP 列
推荐阅读
- python - Matplotlib 后端在使用对象检测 API、QtAgg 到 Agg 时发生变化
- c - 将数组数组传递给函数
- vba - 如何移动与所选电子邮件具有相同主题的电子邮件?
- three.js - 如何为这个简单的着色器设置动画
- kotlin - 向 retrofit2.Response 添加新的自定义属性
- firebase - 安装 @ionic-native/firebase 后出现 ionic cordova 构建错误
- r - 将非唯一值放入新列的 spread()
- javascript - Auth0 和 Vue.js。重定向到上一页
- excel - 当传递一个固定长度的字符串时,Left() 函数如何与 GetWindowsDirectory API 一起工作?
- javascript - 我可以在 row.add() 中使用“if else 语句”吗?