2012-01-09 100 views
0

我已经实现了数据库如下如何减去天数n从给定日期在python

from google.appengine.ext import db 
from google.appengine.ext import blobstore 

class Medicine: 
id = db.IntegerProperty(required=True) 
exp_date = db.DateProperty() 

,并在实体管理器我想所有的药品,其中到期日 - 20

MedicineEntity: 
def get_medicines(self): 
query = db.GqlQuery("SELECT * FROM Medicine WHERE exp_date=:1", exp_date -20) 

我知道我的查询是错误的。有没有办法像Gql中的sql那样获得差异?任何人都可以帮忙吗?

+0

你有两个选择,和搜索,就会发现答案两者。 (1)在SQL之外进行日期算术(即计算新日期)或(2)在SQL中进行日期算术(即从今天减去exp_date)。尝试搜索方法的SQL日期差异和Python日期差异。 – 2012-01-09 13:19:02

+0

我正在寻找Gql和IM仍在寻找方式 – 2012-01-09 13:19:46

+1

在'get_medicines()'中设置了'exp_date'(你确定要在你的模型中手动设置一个'id'字段)? – geoffspear 2012-01-09 14:06:14

回答

6

在python中这样做的标准方法是使用timedelta。

如:

from datetime import datetime, timedelta 
now = datetime.now() 
delta = timedelta(days=20) 

then = now - delta 

所以1个选择是EXP_DATE转换成日期时间,减去timedelta然后将其转换回dateproperty。

我还没有使用appengine,所以我不知道这将是多么的艰难。

编辑:一些网站的搜索显示,DateProperty实际存储的值作为DateTime对象,所以它应该是这么简单

query = db.GqlQuery("SELECT * FROM Medicine WHERE exp_date=:1", exp_date - timedelta(days=20))