如何在flask-SQLAlchemy中使用Default和Onupdate之类的值

时间:2015-02-02 13:00:41

标签: 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, default=False)
  modified_on = db.Column(db.TIMESTAMP, onupdate=datetime.datetime.now)

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

1 个答案:

答案 0 :(得分:17)

SQLAlchemy的默认值和SQL默认值之间存在差异。通常,设置SQLAlchemy默认值应该足够了,因为您不应该直接与服务器直接交互。如果您确实要在服务器端呈现默认值,请使用server_default的{​​{1}}和server_onupdate个参数。

Column

就个人而言,我不喜欢这个解决方案,因为它会将您的应用程序中的行为移动到一个单独的位置,以后您可能会忽略它。只需在Python端执行默认设置就更简单了:

db.Column(
    db.DateTime, nullable=False,
    server_default=db.func.current_timestamp(),
    server_onupdate=db.func.current_timestamp()
)

另外,请考虑从使用db.Column( db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow ) 更改为datetime.now,因为UTC更容易在幕后使用。只有在向用户显示内容时才转换为本地时间。