在此模型中
class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.StringProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now=True)
mDATE0 = db.DateTimeProperty(auto_now_add=True)
mWEIGHT = db.IntegerProperty()
我想做:
mWEIGHT = mCOUNT / mDATE0
在此 for 循环中
for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
rep=C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
# how to convert mDATE0 to integer so that I can divide:
# rep.mWEIGHT = rep.mCOUNT / rep.mDATE0
rep.put()
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
我在其他几个论坛上问了同样的问题,我得到了很好且有值(value)的建议,但我仍然无法使这段代码工作,因为我对(对象,实例,datetime.datetime,秒,秒......和)感到困惑等等)例如,我认为
mWEIGHT = mCOUNT / rep.mDATE0.second
会将 mDATE0 转换为秒;但事实并非如此,它只是取了 2010-11-12 18:57:27.338000
的第二部分,即 27。
还有
mWEIGHT = mCOUNT / mDATE0.date
给出类型不匹配的错误消息。
我也尝试过
rep.mWEIGHT = rep.mCOUNT / rep.mDATE0.toordinal()
这给出了一个类似于 734088
的数字,但所有项目都有相同的数字。
另请参阅我的 previous question关于同一主题。
感谢您的帮助。
编辑3
这有效,谢谢!
if C_RESULT:
rep = C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
utc_tuple = rep.mDATE0.utctimetuple()
# this is actually float not integer
mDATE0_integer = time.mktime(utc_tuple)
mDATE0_day = mDATE0_integer / 86400
rep.mWEIGHT = float(rep.mCOUNT / mDATE0_day)
rep.put()
编辑2 @Constantin:我意识到数字需要是 float :
>>> mCOUNT = 35
>>> div = mCOUNT / mDATE0
>>> div
0
>>> div = float(mCOUNT) / float(mDATE0)
>>> div
2.7140704010987625e-08
>>>
不确定如何将其合并到脚本中。有什么建议吗?
编辑
@康斯坦丁:
对于该项目
C_RESULT[0] = "新项目"
这是我得到的结果。
new item:
rep: <__main__.Rep object at 0x052186D0>
mDATE0_integer: 1289575981
rep.mCOUNT: 35
rep.mWEIGHT: 0
所以
mDATE0_integer = int(time.mktime(rep.mDATE0.utctimetuple()))
可以工作并给出整数1289575981
但是这个除法
rep.mWEIGHT = rep.mCOUNT / mDATE0_integer
结果为 0。有什么建议吗?
最佳答案
这应该可以满足您的要求:
import time
mWEIGHT = mCOUNT / time.mktime(mDATE0.utctimetuple())
参见mktime
.
mCOUNT/mDATE0.date
失败,因为 int
和 date
没有除法运算符。
toordinal
不适合您,因为它按日期运行并完全忽略时间。
关于python - Google App Engine 中的工作日期时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173245/