我在表里面有一个字段,那就是时间
time = db.Column(db.Time, default=datetime.datetime.now().time(), nullable=False)
字符串
由于某种原因,它一直默认相同的时间,而不是实际的系统时间
"23:53:27.34808"
"20:10:29.613031"
"20:10:29.65371"
"20:10:29.230696"
"20:10:29.613031"
"01:40:41.962449"
"20:10:29.375499"
"09:48:38.981206"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.541895"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.56931"
"05:01:44.076726"
"10:42:38.56931"
"15:15:18.271026"
"07:29:20.49368"
"15:15:18.271026"
"15:15:18.271026"
型
如果你看看时间有4或5个相同的时间,它应该采取时间的权利,现在作为默认选项
知道是什么引起的吗
2条答案
按热度按时间lpwwtiir1#
default=datetime.datetime.now().time()
将在导入时被评估一次,导致所有示例的观察行为被分配相同的值。当提供Python函数作为默认值时,通常的解决方案是提供函数对象:
字符串
但是在这种情况下,涉及到两个函数调用(
.now()
和.time()
),所以解决方案是定义一个函数(或lambda)来执行这两个函数:型
使用这种方法,
default_time
将在每次需要时被调用,并为每个示例返回一个新值。另请参阅SQLAlchemy文档,了解如何使用Python函数作为默认值。
正如用户Belayer在评论中所暗示的,通常将生成时间戳委托给数据库,而不是在Python中生成它们。在这种情况下,您可以在列上设置server_default属性,例如:
型
或
型
数据库端有各种函数可以生成时间戳,它们通常特定于特定的数据库引擎,因此您可能需要研究以找到最适合您需求的函数。
pieyvz9o2#
想要添加到@snakecharmerb的答案。
sqlalchemy 2.0
导入now
函数的方法是:字符串
你可以这样使用它:
型