Python 如何在SQLAlchemy中使用Default和Onupdate等值

Python 如何在SQLAlchemy中使用Default和Onupdate等值,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我的代码 class User(db.Model, UserMixin): uid = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(250), unique=True) password = db.Column(db.String(250)) name = db.Column(db.String(250)) created_on = db.Column(db.TIMESTAMP,

我的代码

class User(db.Model, UserMixin):
  uid = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(250), unique=True)
  password = db.Column(db.String(250))
  name = db.Column(db.String(250))
  created_on = db.Column(db.TIMESTAMP, default=False)
  modified_on = db.Column(db.TIMESTAMP, onupdate=datetime.datetime.now)

我想创建一个字段timestamp,它将有一个默认值timestamp,onupdate将再次更改为当前时间戳。但是当我运行迁移时,这不会在MySQL中创建带有默认值或onupdate值的字段,我做错了什么?

SQLAlchemy的默认值和SQL默认值之间存在差异。通常,设置SQLAlchemy默认值就足够了,因为您不应该正常地直接与服务器交互。如果确实要在服务器端呈现默认值,请使用
server\u default
server\u-update
参数来设置

db.Column(
    db.DateTime, nullable=False,
    server_default=db.func.current_timestamp(),
    server_onupdate=db.func.current_timestamp()
)
就个人而言,我不喜欢这个解决方案,因为它将行为从您的应用程序移动到一个单独的位置,您以后可能会忽略它。只在Python端执行默认设置更简单:

db.Column(
    db.DateTime, nullable=False,
    default=datetime.utcnow,
    onupdate=datetime.utcnow
)

也可以考虑从使用<代码>日期时间。现在到<代码> DATETIME.UTCWN,因为UTC更容易在幕后工作。仅当向用户显示某些内容时才转换为localtime