Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ndb未按日期正确查询_Python_Google App Engine_Datetime_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Python ndb未按日期正确查询

Python ndb未按日期正确查询,python,google-app-engine,datetime,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Datetime,Google Cloud Datastore,App Engine Ndb,我正在对费用模型进行单元测试。模型的相关部分如下所示: class Expense(ndb.Model): user = ndb.KeyProperty(User, required=True) timestamp = ndb.DateTimeProperty(required=True) ... @staticmethod def new(user, amount, comment, description, timestamp):

我正在对费用模型进行单元测试。模型的相关部分如下所示:

class Expense(ndb.Model):

    user = ndb.KeyProperty(User, required=True)
    timestamp = ndb.DateTimeProperty(required=True)
    ...

    @staticmethod
    def new(user, amount, comment, description, timestamp):
        """creates a new expense and stores it. It returns the Expense instance"""
        ... validation ...
        exp = Expense(user=user, timestamp=timestamp, ...)
        exp.put()
        return exp

    @staticmethod
    def list(user, from_date=None, to_date=None):
        ...  
        query = Expense.query(Expense.user == user)
        if from_date is not None:
            if not isinstance(from_date, datetime.datetime):
                raise ValueError("from_date must be a datetime.datetime instance")
            query.filter(Expense.timestamp >= from_date)
        if to_date is not None:
            if not isinstance(to_date, datetime.datetime):
                raise ValueError("to_date must be a datetime.datetime instance")
            query.filter(Expense.timestamp <= to_date)
        query.order(- Expense.timestamp)
        return query
但是当我从pytest运行这个测试时,我在下面的一行中得到了一个AssertionError,如pytest所示:

assert datetime.datetime(2013, 5, 1, 0, 0) <= datetime.datetime(2013, 1, 3, 12, 30)

我误解了
Query.filter
的工作原理。它不会改变当前的
Query
实例,但会返回一个新实例。

try
return Query.fetch()
我已经尝试过了。这给了我同样的问题。那么,这是一个封闭的问题吗?:)
assert datetime.datetime(2013, 5, 1, 0, 0) <= datetime.datetime(2013, 1, 3, 12, 30)
def test_ndb_date():
    from google.appengine.ext import ndb

    class Time(ndb.Model):
        timestamp = ndb.DateTimeProperty(required=True)

    t1 = Time(timestamp=datetime.datetime.now() - datetime.timedelta(days=365))
    t2 = Time(timestamp=datetime.datetime.now())
    t3 = Time(timestamp=datetime.datetime.now() + datetime.timedelta(days=365))
    ndb.put_multi([t1, t2, t3])
    from_date = datetime.datetime.now() - datetime.timedelta(days=1)
    to_date = datetime.datetime.now() + datetime.timedelta(days = 1)
    result = Time.query(Time.timestamp <= from_date, Time.timestamp >= to_date).fetch()
    for time in result:
        assert from_date <= time.timestamp >= to_date