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())