使用SQLAlchemy定义数据库中的datetime

13 投票
1 回答
6529 浏览
提问于 2025-04-16 21:36

我在定义表的时候,应该在datetime.now后面加上括号吗?下面的代码哪个是错的,1还是2?

1:

Base = declarative_base()
class T(Base):
    __tablename__ = 't'

    created = Column(DateTime, default=datetime.now)

2:

Base = declarative_base()
class T(Base):
    __tablename__ = 't'

    created = Column(DateTime, default=datetime.now())

1 个回答

20

你想要的是第一种情况。你现在做的事情是告诉SqlAlchemy,每当插入一行数据时,就运行这个函数(可调用的)来获取默认值。这个函数可以是任何可调用的函数,也可以是一个字符串值。

这样,函数会在插入数据的那一刻被调用,你就能得到准确的插入时间。

如果你使用第二种值,你会发现所有的默认值都共享同一个时间。这将是代码第一次被处理时的时间。

http://www.sqlalchemy.org/docs/core/schema.html?highlight=default#sqlalchemy.schema.ColumnDefault

This could correspond to a constant, a callable function, or a SQL clause.

撰写回答