Exactly.

Looking at exceptions reference I would expect BadQueryError or
BadArgumentError to be raised in wrong call.

Thanks again for helping me on this.

-Dmitry

On Apr 22, 7:26 am, 风笑雪 <kea...@gmail.com> wrote:
> You mean this?
> Wrong:  filter("checkpoint_id=", bus.checkpoint_id)
> Right:    filter("checkpoint_id= ", bus.checkpoint_id)
>
> 2009/4/22 Dmitry Kachaev <dmitry.kach...@gmail.com>
>
>
>
> > I got it, thanks all!
>
> > It was a lack of space between property name and operator in filter()
> > method. It led to empty result (but not an exception???)
>
> > -Dmitry
>
> > On Apr 21, 11:52 am, Mark Wolgemuth <fuma...@gmail.com> wrote:
> > > I think your second one may be "working" because using the string
> > > substitution is causing an unexpected value to appear in the query
> > > that still is accepted by the engine. You should generate a log entry
> > > before the query to see what passing the id to %s is actually giving
> > > you.
>
> > > On Apr 21, 8:10 am, Dmitry Kachaev <dmitry.kach...@gmail.com> wrote:
>
> > > > Yes, Checkpoint class is defined in models package.
>
> > > > bus.checkpoint_id has value (in both cases, I can see it in debug
> > > > messages)
>
> > > > -Dmitry
>
> > > > On Apr 21, 8:04 am, 风笑雪 <kea...@gmail.com> wrote:
>
> > > > > Why you use models.Checkpoint?
> > > > > Is the Checkpoint class defines in models package/module?
>
> > > > > If not, use this:
> > > > > point_old = Checkpoint.all().filter("checkpoint_id=",
> > > > > bus.checkpoint_id).get()
>
> > > > > And for the "'NoneType' object has no attribute 'checkpoint_id'", you
> > should
> > > > > check bus.checkpoint_id to ensure it's not None.
>
> > > > > 2009/4/21 Dmitry Kachaev <dmitry.kach...@gmail.com>
>
> > > > > > I use following construction to lookup records from datastore:
>
> > > > > >            point_old=models.Checkpoint.all().filter("checkpoint_id
> > > > > > =", bus.checkpoint_id).get()
>
> > > > > > It works fine in most scenarios, but sometime I'm getting error
> > like
> > > > > > this:
>
> > > > > > 'NoneType' object has no attribute 'checkpoint_id'
> > > > > > Traceback (most recent call last):
> > > > > >  File "/base/python_lib/versions/1/google/appengine/ext/webapp/
> > > > > > __init__.py", line 501, in __call__
> > > > > >    handler.get(*groups)
> > > > > >  File "/base/data/home/apps/xxx/1.332943763447248076/tasks/
> > > > > > busupdate.py", line 22, in get
> > > > > >    self.update(bus)
> > > > > >  File "/base/data/home/apps/xxx/1.332943763447248076/tasks/
> > > > > > busupdate.py", line 45, in update
> > > > > >    self.check_points(bus)
> > > > > >  File "/base/data/home/apps/xxx/1.332943763447248076/tasks/
> > > > > > busupdate.py", line 86, in check_points
> > > > > >    logging.debug("found old checkpoint: %s" %
> > > > > > (point_old.checkpoint_id))
> > > > > > AttributeError: 'NoneType' object has no attribute 'checkpoint_id'
>
> > > > > > Basically, get() returns None, but record I looked up is definitely
> > in
> > > > > > datastore.
>
> > > > > > I figured out and replaced this look up call with equivalent GQL
> > call:
>
> > > > > >            point_old = db.GqlQuery("SELECT * FROM Checkpoint WHERE
> > > > > > checkpoint_id = %s" % (bus.checkpoint_id)).get()
> > > > > >            #point_old=models.Checkpoint.all().filter("checkpoint_id
> > > > > > =", bus.checkpoint_id).get()
>
> > > > > > What is wrong? Those constructs should behave the same way, but
> > they
> > > > > > don't. Commented one is not returning a record, when GQL is
> > returning
> > > > > > single record, just fine.
>
> > > > > > Thanks,
> > > > > > Dmitry
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to