【问题标题】:How to automatically calculate a field in a SQLalchemy table in python?如何在 python 中自动计算 SQLalchemy 表中的字段?
【发布时间】:2020-08-18 05:22:47
【问题描述】:

我有一个包含 create_datedue_date 字段的表格。我希望due_date 总是在create_date 之后的 90 天。我希望在不插入该列的情况下自动生成 due_date 字段。根据我的查找,column_property 可能是我需要的。

from sqlalchemy.orm import column_property

class MyTable(Base):
    __tablename__ = "my_table"
    created_date = Column(DateTime, default=datetime.utcnow)
    due_date = column_property(created_date + timedelta(days=90))

这段代码运行没有错误。该表已创建,但未创建到期日期列。

【问题讨论】:

  • 和?当您使用 column_property 时,您会遇到什么错误/行为?
  • 这段代码运行没有错误。该表已创建,但未创建到期日期列。
  • 听起来column_property 没有在表端创建列,只是一个ORM端的表示。

标签: python sqlalchemy


【解决方案1】:

您需要将Columndefault 一起使用,这样,SQLAlchemy 将在首次创建对象时将due_date 设置为空:

def default_due_date(context):
    return context.get_current_parameters()['created_date'] + timedelta(days=90)

class MyTable(Base):
    __tablename__ = "my_table"
    created_date = Column(DateTime, default=datetime.utcnow)
    due_date = Column(DateTime, default=default_due_date)

基于this question 如何将默认值基于另一个字段的值。

【讨论】:

  • 当前错误AttributeError: 'str' object has no attribute 'get_current_parameters'get_current_parameters 是 python 2.7+ 支持的 sqlalchemy 版本 1.2。我正在使用 python 3.8.3,不知道为什么会收到这个。
  • context 是您代码中的字符串。你知道它的价值吗?你能在default_due_date里面打印吗?
猜你喜欢
  • 2019-09-10
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多