【问题标题】:What's equivalent to Django's auto_now, auto_now_add in SQLAlchemy?SQLAlchemy 中 Django 的 auto_now、auto_now_add 等价于什么?
【发布时间】:2013-02-14 16:32:23
【问题描述】:

在 Django 中,我们可以在制作日期列时使用这两个参数:

DateField.auto_now 每次自动设置字段为现在 对象被保存。对于“最后修改”的时间戳很有用。请注意, 始终使用当前日期;这不仅仅是你的默认值 可以覆盖。

DateField.auto_now_add 自动将字段设置为现在 首先创建对象。用于创建时间戳。注意 始终使用当前日期;这不仅仅是一个默认值 你可以覆盖。

如何在 SQLAlchemy 中做到这一点?

【问题讨论】:

    标签: python django date sqlalchemy


    【解决方案1】:

    最后,在检查了 SQLAlchemy 文档之后,应该是这样的:

    Column('created_on', DateTime, default=datetime.datetime.now)
    
    Column('last_updated', DateTime, onupdate=datetime.datetime.now)
    

    文档在这里:

    http://docs.sqlalchemy.org/en/latest/core/defaults.html#python-executed-functions

    【讨论】:

    • 很好的发现。我还建议您创建一个链接,指向您在文档中找到它的位置。
    • 其实这并不完全正确。为了模仿 Django,last_updated 字段应该是 Column('last_updated', DateTime, default=datetime.now(), onupdate=datetime.now()) - 因为 Django 在创建时将 auto_now 字段设置为 now
    • 文档返回 404。
    • 添加nullable=False 也不错。在 Alembic 中,如果您检查修订文件,默认设置为 nullable=True
    【解决方案2】:

    仍然可以使用以下内容:

    enter_date = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
    

    在更新时,sqlalchemy 也会在数据更新时设置当前日期。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2010-12-16
      • 2011-11-21
      • 1970-01-01
      • 2018-12-25
      • 2021-08-04
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多