Database 如何自动填充SQLAlchemy数据库字段?(炼金术)
我有一个简单的用户模型,定义如下:Database 如何自动填充SQLAlchemy数据库字段?(炼金术),database,postgresql,sqlalchemy,flask,flask-sqlalchemy,Database,Postgresql,Sqlalchemy,Flask,Flask Sqlalchemy,我有一个简单的用户模型,定义如下: # models.py from datetime import datetime from myapp import db class User(db.Model): id = db.Column(db.Integer(), primary_key=True) email = db.Column(db.String(100), unique=True) password = db.Column(db.String(100)) date_up
# models.py
from datetime import datetime
from myapp import db
class User(db.Model):
id = db.Column(db.Integer(), primary_key=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
date_updated = db.Column(db.DateTime())
def __init__(self, email, password, date_updated=None):
self.email = email
self.password = password
self.date_updated = datetime.utcnow()
创建新用户对象时,我的date\u updated
字段将设置为当前时间。我想做的是,当我保存对用户对象的更改时,我的date\u updated
字段将自动设置为当前时间
我已经翻遍了文档,但就我个人而言,似乎找不到任何与此相关的参考资料。我对SQLAlchemy很陌生,所以我确实没有以前的经验可以借鉴
希望得到一些反馈,谢谢。只需在列字段中添加
server\u default
或default
参数即可:
created_on = db.Column(db.DateTime, server_default=db.func.now())
updated_on = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())
我更喜欢{created,updated}\u上的列名
SQLAlchemy文档关于
[编辑]:更新了代码以使用代码中的服务器默认参数
[编辑2]:将onupdate
替换为server\u onupdate
参数。此类字段通常称为审核或记录时间戳字段。使用这些术语搜索可能会发现更多。您好,请建议如何修改时区,因为db.func.now()
将时间戳从我的时区返回。提前感谢。我发现只需updated\u on=db.Column(db.DateTime,onupdate=DateTime.DateTime.now)
根据解决时区问题。为什么使用server\u default
?文档冗长但毫无用处。从数据库中出现的名称猜测?server\u default
是在create\u table
指令期间在SQL中发出的服务器端值,而default
值指的是模型的python端。特别是在*中,要在数据库端创建的默认值是使用server\u default
参数指定的,而不是只指定Python端默认值的default
参数*不适用于mysql 5.5,因为它不支持DATETIME default now()
。还有其他方法吗?这里可以找到这种变体的一些理由:
date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(),
onupdate=db.func.current_timestamp())