在Google App Engine中设置DateTimeProperty为日期时间时出错

2 投票
1 回答
2193 浏览
提问于 2025-04-15 17:53

我在写一些Google App Engine的代码时遇到了一个奇怪的错误。

我的程序里有这样的代码:

import datetime

...

class Action(db.Model):
    visibleDate = db.DateTimeProperty()

...

getActionQuery = Action.gql("WHERE user = :user AND __key__ = :key", user = user, key = self.request.get("key"))
theAction = getActionQuery.get()

....

theAction.visibleDate = datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d")

但是这段代码却出现了以下错误:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 509, in __call__
    handler.post(*groups)
  File "/Users/redbird/Developer/betterdo-it/main.py", line 132, in post
    theAction.visibleDate = datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d"),
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 472, in __set__
    value = self.validate(value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2308, in validate
    (self.name, self.data_type.__name__))
BadValueError: Property visibleDate must be a datetime

有没有人知道为什么会这样?我测试过了,确认我的时间数据是正确的,转换也没问题,但就是碰到了这个错误。

1 个回答

5

我觉得你在错误追踪信息中漏掉了一些东西。

我看到你写了:datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d"),

注意这一行末尾的逗号。

这个逗号让这一行返回了一个包含你日期的元组。我猜你是误加了这个逗号,所以只需要把它去掉,你就可以正确地赋值一个日期时间了。

再回顾一下:

from datetime import datetime
a = (datetime(2000,1,1),)
assert isinstance(a, tuple)
a = (datetime(2000,1,1))
assert isinstance(a, datetime)

撰写回答