我相信我需要使用,ndb.delete_multi但我很困惑如何使它适用于一组特定的键,以及它是否是最有效的方法.将Python 2.7与Google App Engine结合使用.
首先,我正在收集我要删除的密钥.我不想删除所有内容,只删除1小时或更长时间的条目.为此,我首先收集符合此标准的密钥列表.
cs = ChannelStore()
delMsgKeys = []
for x in cs.allMessages():
current = datetime.datetime.now()
recordTime = x.channelMessageCreated
timeDiffSecs = (current - recordTime).total_seconds()
timeDiff = (timeDiffSecs/60)/60
if timeDiff >=1:
delMsgKeys.append(x.key.id())
ndb.delete_multi(?????)
Run Code Online (Sandbox Code Playgroud)
cs.allMessages()的定义:
def allMessages(self):
return ChannelStore.query().fetch()
Run Code Online (Sandbox Code Playgroud)
首先,这总体上是最有效的方法吗?其次,如何使用我用ndb.delete_multi语句创建的密钥列表?
---更新----
ndb.delete_multi的问题与我传递的密钥有关.在我上面发布的代码中,密钥应该存储如下:
delMsgKeys.append(x.key)
Run Code Online (Sandbox Code Playgroud)
用上面的ndb.delete_multi工作.
google-app-engine python-2.7 app-engine-ndb google-cloud-datastore
在将数据存储到NDB中时,我想从字符串变量中获取字段的名称(例如,field_name2 ="userid").有办法吗?提前致谢.
class Account(ndb.Model):
username = ndb.StringProperty()
userid = ndb.IntegerProperty()
class MainPage():
field_name2 = 'userid'
acct = Account.get_key(id).get()
acct.username = "Bob"
acct[**field_name2**] = "001" ## How can I do something like this?
acct.put()
Run Code Online (Sandbox Code Playgroud) python google-app-engine app-engine-ndb google-cloud-datastore
我有一个GAE +端点在Android客户端和应用引擎后端之间工作.
我现在正处于使用JDO将小图像存储为Blob数据类型的位置.我的模型的后端有以下两种方法:
public byte[] getPicture() {
if (picture == null) {
return null;
}
return picture.getBytes();
}
public void setPicture(byte[] bytes) {
this.picture = new Blob(bytes);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我为Android客户端生成端点时,setPicture(byte [] bytes)方法签名将转换为setPicture(String bytes).
这是一个错误还是打算?如果打算,我该如何将我的图像转换为字符串?
谢谢!
java google-app-engine android google-cloud-endpoints google-cloud-datastore
我有一个我想要转换为JSON的ndb.Model.
class Users(ndb.Model):
username = ndb.StringProperty(indexed=True)
password= ndb.StringProperty(indexed=True)
created_at = ndb.DateTimeProperty(auto_now_add=True)
user = Users.query(Users.username==username).get()
rv = json.dumps(user.to_dict())
print(rv)
Run Code Online (Sandbox Code Playgroud)
它抛出此错误:
TypeError: datetime.datetime(2013, 11, 24, 3, 40, 15) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
这里的大多数解决方案都是针对db.Model的,并且已经过时了.
sdk版本1.9.10
google-app-engine json python-2.7 app-engine-ndb google-cloud-datastore
我创建了两个MapReduce管道,用于上传CSV文件以批量创建类别和产品.每个产品都通过KeyProperty绑定到Category.类别和产品模型是基于ndb.Model构建的,因此根据文档,我认为从数据存储区检索时它们会自动缓存在Memcache中.
我在服务器上运行这些脚本来上传30个类别,然后是3000个产品.所有数据都按预期显示在数据存储区中.
但是,似乎产品上传不使用Memcache来获取类别.当我在门户检查内存缓存浏览器,它说沿着命中数是大约180和怀念的东西线数60左右如果我上传3000种产品和每一次检索类别,不应该我有大约3000从获取类别中击中+未命中(即Category.get_by_id(category_id))?在创建新产品之前尝试检索现有产品可能会有3000多次失误(算法处理实体创建和更新).
这是相关的产品映射功能,它从CSV文件中获取一行以创建或更新产品:
def product_bulk_import_map(data):
"""Product Bulk Import map function."""
result = {"status" : "CREATED"}
product_data = data
try:
# parse input parameter tuple
byteoffset, line_data = data
# parse base product data
product_data = [x for x in csv.reader([line_data])][0]
(p_id, c_id, p_type, p_description) = product_data
# process category
category = Category.get_by_id(c_id)
if category is None:
raise Exception(product_import_error_messages["category"] % c_id)
# store in datastore
product = Product.get_by_id(p_id)
if product is not None:
result["status"] = "UPDATED"
product.category = category.key
product.product_type …Run Code Online (Sandbox Code Playgroud) google-app-engine memcached mapreduce app-engine-ndb google-cloud-datastore
我正在通过匹配日期在python中查找数据存储区条目.我想要的是每天选择"今天"的条目.但出于某种原因,当我将我的代码上传到gae服务器时,它只能工作一天,第二天它仍会返回相同的值.
例如,当我上传我的代码并在07-01-2014执行它时,它返回07-01-2014的值,但是在08-01-2014的第二天它仍然返回07-01-2014.
如果我重新部署相同的代码并再次执行它,则会转到08-01-2014,但第二天将再次失败.
在我的开发环境中它工作得很好......
为什么?谢谢你的帮助!
class ClosingValueHandler(webapp2.RequestHandler):
def get(self):
sct()
Run Code Online (Sandbox Code Playgroud)
(......)
def sct(from_date=datetime.datetime.now().date()):
value = getValueByDate(from_date)
def getValueByDate(date):
query = "SELECT * FROM Value WHERE date = DATE('%s')" % str(date)
try:
q = db.GqlQuery(query)
value = q.get()
except Exception as e:
logging.error("Could not fetch Value value for date '%s' \n Error message: %s \n" % (str(date), str(e)))
return
return value
Run Code Online (Sandbox Code Playgroud) 我在api explorer中遇到GAE问题.我正在尝试使用objectify保存到数据存储区但是我收到此错误:
{
"error": {
"message": "java.lang.NoClassDefFoundError: Could not initialize class Project.service.OfyService",
"code": 503,
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "java.lang.NoClassDefFoundError: Could not initialize class Project.service.OfyService"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我试着谷歌一堆但空手而归.我是GAE的新手,对Java有点新鲜.这是在intelliJ的控制台中显示的内容:
java.lang.NoClassDefFoundError: Could not initialize class Project.service.OfyService
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestrict ed(RuntimeHelper.java:70)
at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
at Project.saveProfile(ProjectApi.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) …Run Code Online (Sandbox Code Playgroud) java google-app-engine maven objectify google-cloud-datastore
假设我首先将此结构保存到数据存储中:
type Foo struct {
Important string
NotImportant string
}
Run Code Online (Sandbox Code Playgroud)
但后来我决定我不再关心它NotImportant了,想停止支持它。问题是,我的数据存储已经填充了数据,我不能只是删除它并用更新的结构替换整个数据库。我知道可以创建自定义的 Load 和 Save 方法,例如Load(c <-chan datastore.Property) error {,但这需要在大型结构上付出很多努力。
是否有一些简单的方法可以告诉 Google App Engine Go 数据存储区在保存时忽略某些变量,而不是抱怨我正在加载数据的结构没有我不再关心的变量?
database google-app-engine go data-structures google-cloud-datastore
我想做一些像python在app引擎上支持的Expando模型.
有时您不希望提前声明您的属性.特殊模型子类Expando会更改其实体的行为,以便分配任何属性(只要它不以下划线开头)将保存到数据存储区.
我怎么能在Go中这样做?
我正在使用Android Studio,我想将我的应用程序连接到互联网.我想保存Google(高复制)数据存储区中的高分.
在使用Google插件的Eclipse中,它似乎非常简单(只需创建一个新的Web应用程序并连接它).但它如何在Android Studio中运行?我尝试用端点和东西做一些事情,但没有真正有效.