【问题标题】:Python + sqlalchemy: how to process timedelta on database side?Python + sqlalchemy:如何在数据库端处理 timedelta?
【发布时间】:2012-02-07 18:39:25
【问题描述】:

用 Python 编码,我想像这样插入在数据库端处理的时间:

time = func.now()-datetime.timedelta(days=100)

time = func.current_timestamp()-datetime.timedelta(days=100)

但不知何故它无法通过,看到警告:

sqlalchemy\engine\default.py:330: Warning: Truncated incorrect DOUBLE value: '1970-01-04 00:00:00'

有什么办法可以直截了当?谢谢。

=================================

我想更新表 'Purchase' 中的 TIMESTAMP 列 'date_buy',而不是使用 datetime.datetime.now() 在 python 中获取更新时间,我想在数据库中完成此操作,这意味着我更喜欢 func.now():

time = func.current_timestamp()-datetime.timedelta(days=100)
# time = datetime.datetime.now()-datetime.timedelta(days=100)
session.execute(update(Purchase).values(date_buy=time).where(Purchase.c.id == 11))

==================================

解决了。感谢 Bryan 和他的帖子: http://groups.google.com/group/sqlalchemy/browse_thread/thread/a67d4f179e01b98a/ee688a0b8a999f52?hl=en&lnk=gst&q=date_add#ee688a0b8a999f52

【问题讨论】:

  • 如果您找到了解决方案,则接受答案以关闭问题。请执行此操作以完成系统的工作流程。

标签: python sqlalchemy func timedelta


【解决方案1】:

警告是

Warning: Truncated incorrect DOUBLE value: '1970-01-04 00:00:00'

意味着它会截断您的数据。请检查您要在其中存储时间对象的字段类型。 它表示您正在尝试将 DOUBLE 值与日期时间值一起存储。

如果这不能解决问题,那么只需给出一些代码示例,以便我们了解您将要做什么。

【讨论】:

  • 请查看编辑后的帖子。我不确定这是否是将对该字段的操作留给 MySQL 而不是 python 的正确方法。谢谢!
  • date_buy 的类型是什么?请提供购买类别。
  • CURRENTTIMESTAMP 是双精度值,您正试图从 CURRENTTIMESTAMP 中减去日期时间。只需使用相同类型的操作数来执行操作。你可以使用converttimestamp(func.now() - datetime.timedelta(days=100))
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2011-05-23
  • 2013-10-03
相关资源
最近更新 更多