Leo*_*eoG 5 python sqlalchemy flask 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)
Run Code Online (Sandbox Code Playgroud)
我想创建一个字段时间戳,它将具有默认值时间戳,onupdate将再次更改为当前时间戳.但是当我运行迁移时,这不会在MySQL中使用默认值或更新值创建字段,我做错了什么?
dav*_*ism 21
SQLAlchemy的默认值和SQL默认值之间存在差异.通常,设置SQLAlchemy默认值应该足够了,因为您不应该直接与服务器直接交互.如果您确实要在服务器端呈现默认值,请使用server_default和server_onupdate参数Column.
db.Column(
db.DateTime, nullable=False,
server_default=db.func.current_timestamp(),
server_onupdate=db.func.current_timestamp()
)
Run Code Online (Sandbox Code Playgroud)
就个人而言,我不喜欢这种解决方案,因为它会将您的应用程序中的行为移动到一个单独的位置,以后您可能会忽略它.只需在Python端执行默认设置就更简单了:
db.Column(
db.DateTime, nullable=False,
default=datetime.utcnow,
onupdate=datetime.utcnow
)
Run Code Online (Sandbox Code Playgroud)
此外,请考虑从使用更改datetime.now为datetime.utcnow,因为UTC更容易在幕后使用.只有在向用户显示内容时才转换为本地时间.
| 归档时间: |
|
| 查看次数: |
5932 次 |
| 最近记录: |