我正在使用gdb(Xcode内部)单步执行一些简单的Objective-C代码并注意到一些奇怪的东西.这是相关的片段:
NSString *s = nil;
int x = (s == nil);
Run Code Online (Sandbox Code Playgroud)
正如我所料,x这两行之后的价值是1.奇怪的是,如果我在gdb中尝试类似的东西,它不会起作用:
(gdb) print ret
$1 = (NSString *) 0x0
(gdb) print (int)(ret==nil)
$2 = 0
(gdb) print nil
$3 = {<text variable, no debug info>} 0x167d18 <nil>
Run Code Online (Sandbox Code Playgroud)
似乎gdb对于nil有一些定义,而不是Objective-C使用的(0x0).有人能解释一下这里发生了什么吗?
Google App Engine数据存储区查询语言(gql)不提供"LIKE"等不精确的运算符,甚至不区分大小写.通过存储字段的小写版本,可以解决区分大小写的问题.但是如果我想搜索一个人但我不确定这个名字的拼写怎么办?是否有可接受的处理此方案的模式?
阅读:http://code.google.com/appengine/docs/python/datastore/gqlreference.html
我想用:
:= IN
但我不确定如何使它工作.我们假设如下
class User(db.Model):
name = db.StringProperty()
class UniqueListOfSavedItems(db.Model):
str = db.StringPropery()
datesaved = db.DateTimeProperty()
class UserListOfSavedItems(db.Model):
name = db.ReferenceProperty(User, collection='user')
str = db.ReferenceProperty(UniqueListOfSavedItems, collection='itemlist')
Run Code Online (Sandbox Code Playgroud)
如何进行查询以获取用户保存的项目列表?显然我可以这样做:
q = db.Gql("SELECT * FROM UserListOfSavedItems WHERE name :=", user[0].name)
Run Code Online (Sandbox Code Playgroud)
但这给我一个关键列表.我现在想要获取该列表并将其放入查询中以从UniqueListOfSavedItems中获取str字段.我以为我能做到:
q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems WHERE := str in q")
Run Code Online (Sandbox Code Playgroud)
但是有些事情不对......任何想法?是(我在我的日常工作,所以现在不能测试):
q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems __key__ := str in q)
Run Code Online (Sandbox Code Playgroud)
旁注:要搜索的是一个非常难以解决的问题,因为我真正关心的是"IN"运算符.
如何在Google App Engine中缓存参考属性?
例如,假设我有以下模型:
class Many(db.Model):
few = db.ReferenceProperty(Few)
class Few(db.Model):
year = db.IntegerProperty()
Run Code Online (Sandbox Code Playgroud)
然后我创造了许多Many只指向一个的东西Few:
one_few = Few.get_or_insert(year=2009)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Run Code Online (Sandbox Code Playgroud)
现在,如果我想迭代所有Many的,读取它们的few价值,我会这样做:
for many in Many.all().fetch(1000):
print "%s" % many.few.year
Run Code Online (Sandbox Code Playgroud)
问题是:
many.few触发数据库查找吗?正如一篇评论中所述:我知道memcache,但是当我通过引用调用另一个实体时,我不确定如何"注入"它.
在任何情况下,memcache都没用,因为我需要在执行中缓存,而不是在它们之间.使用memcache无助于优化此调用.
python database performance google-app-engine google-cloud-datastore
所以我刚刚完成了谷歌应用程序引擎问候教程.到目前为止一切顺利.然后我决定尝试添加一个新的数据存储模型,然后在现有的处理程序中设置它.我添加了一个名为"content2"的第二个内容字段,然后尝试在处理程序Guestbook()中设置它,但它保持不变.我敢肯定这将是最愚蠢的错误,但我很难过.有任何想法吗?
main.py
import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
import os
from google.appengine.ext.webapp import template
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
content2 = db.StringProperty(multiline=True)
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(1000)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, …Run Code Online (Sandbox Code Playgroud) django google-app-engine django-models google-cloud-datastore
向对象添加布尔属性后,从数据存储区中提取该对象会导致错误:
Datastore entity with kind <Class> and key <Class:ID> has a
null property named <attribute>
Run Code Online (Sandbox Code Playgroud) 我正在考虑将Google App Engine用于小型项目,但在我首先进入并开始编写我的应用程序(这是相当简单和常见的东西)之前,我想查看已经完成的工作.但是我找不到任何列出那里已有的应用程序的地方.谁知道这样的地方?
我想开始使用Google App Engine for java.但我不知道,从哪里开始.
google [ http://code.google.com/appengine/docs/java/overview.html ] 提供的教程是否足够?
另外,请提及GAE [java]上的一些好书,以便我可以从rapidshare或torrent下载那些购买这些书并开始阅读它们.
我在eclipse中测试我的gae java jdo例程.
实际问题是,如何清除/清除localhost开发数据存储区,以便我可以从一个处理数据存储区开始新的测试周期?
地址信息 - 对于那些不知道的人:GAE =谷歌应用程序引擎,谷歌的Java托管解决方案和python应用程序.
我有一个Model UnitPattern,它引用了另一个Model UnitPatternSet
例如
class UnitPattern(db.Model):
unit_pattern_set = db.ReferenceProperty(UnitPatternSet)
Run Code Online (Sandbox Code Playgroud)
在我的视图中我想显示所有UnitPatterns,其unit_pattern_set引用为None,但查询UnitPattern.all().filter("unit_pattern_set =",None)什么都不返回,虽然我总共有5个UnitPatterns,其中2个有'unit_pattern_set'设置,3没有
例如
print 'Total',UnitPattern.all().count()
print 'ref set',UnitPattern.all().filter("unit_pattern_set !=", None).count()
print 'ref not set',UnitPattern.all().filter("unit_pattern_set =", None).count()
Run Code Online (Sandbox Code Playgroud)
输出:
Total 5
ref set 2
ref not set 0
Run Code Online (Sandbox Code Playgroud)
查询2和3的总和不应该等于查询1吗?
原因似乎是我稍后添加了引用属性unit_pattern_set,并且之前存在这些UnitPattern对象,但是我如何过滤这些实体?