【问题标题】:How to use values like Default and Onupdate in flask-SQLAlchemy如何在 flask-SQLAlchemy 中使用 Default 和 Onupdate 等值
【发布时间】:2015-02-02 13:00:41
【问题描述】:

我的代码,

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)

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

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    SQLAlchemy 的默认值和 SQL 的默认值是有区别的。通常,设置 SQLAlchemy 默认值就足够了,因为您不应该正常与服务器直接交互。如果您真的想在服务器端呈现默认值,请使用 server_defaultserver_onupdate 参数到 Column

    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.now 更改为 datetime.utcnow,因为 UTC 在幕后更容易使用。只有在向用户显示某些内容时才转换为本地时间。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2014-12-08
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多