小编Dan*_*ath的帖子

为什么GAE数据存储区不支持简单的struct字段类型?

我的单元测试失败并显示消息:

&errors.errorString {s:"datastore:unsupported struct field type:sus.Version"}

我有一个测试结构类型,我试图保存到GAE数据存储区:

type foo struct{
    sus.Version
}
Run Code Online (Sandbox Code Playgroud)

其中sus.Version是界面:

type Version interface{
    GetVersion() int
    getVersion() int
    incrementVersion() 
    decrementVersion() 
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用两个Version实现运行我的测试,首先它只是int的别名:

type version int
Run Code Online (Sandbox Code Playgroud)

其次作为结构:

type version struct{
    val int
}
Run Code Online (Sandbox Code Playgroud)

如果Version接口方法被赋予接收器类型(v *version),它需要是一个指针,因此递减和增量实际上更新它们被调用的版本,而不仅仅是一个副本.我不确定为什么这不起作用,可能是因为它是一个匿名字段?或者因为它是指向int或struct而不是实际的int或struct的指针?

go google-cloud-datastore

1
推荐指数
1
解决办法
1040
查看次数

Python:循环遍历NDB实体模型

我有一个类/ NDB实体模型定义如下:

class CashModel(ndb.Model):
    "Models a Cash record"
    # Name, Balance, Interest Rate
    accountName = ndb.StringProperty()
    interestRate = ndb.FloatProperty()
    balance = ndb.FloatProperty()
    accountType = ndb.StringProperty()
    futureView = ndb.JsonProperty()
    time_stored = ndb.DateTimeProperty(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

一旦将值添加到其中class,打印出来的内容如下所示:

CashModel(accountName=u'Bank', accountType=u'cash', balance=1000.0, futureView=None, interestRate=5.0, time_stored=datetime.datetime(2015, 7, 7, 18, 33, 3, 925601))
Run Code Online (Sandbox Code Playgroud)

如何循环此类的键/值对,因此输出将类似于:

accountName, Bank
accountType, cash
balance, 1000.0
futureView, None
interestRate, 5.0
time_stored, datetime.datetime(2015, 7, 7, 18, 33, 3, 925601)
Run Code Online (Sandbox Code Playgroud)

看了解SO的其他答案,但似乎没有一个合适.使用内置方法的简单解决方案是最好的.TIA

python google-app-engine class app-engine-ndb google-cloud-datastore

1
推荐指数
1
解决办法
443
查看次数

Go App Engine嵌套对象未存储在Cloud Datastore中

我有一个实体EmergencyCase有2个嵌入式结构(1个数组和1个结构)当我尝试通过调用以下方法保存EmergencyCase时:

datastore.Put(c, key, &ec)
Run Code Online (Sandbox Code Playgroud)

除了Pos字段(类型位置)之外,所有内容都保存得很好.没有关于此的错误或日志条目.它只是没有存储.有什么建议?

以下是我的3个实体定义:

type Position struct{
    lon float32
    lat float32
}
type EmergencyCase struct{
    // Autogenerated id, not stored in the database.
    ID string `datastore:"-"`
    CreatedAt time.Time
    Closed bool
    ClosedByUser bool `datastore:",noindex"`
    AutoClosed bool `datastore:",noindex"`
    Pos Position
    Events []Event
}

type Event struct{
    // Autogenerated id, not stored in the datastore.
    ID string `datastore:"-"`
    CreatedAt time.Time
    Name string `datastore:",noindex"`
}
Run Code Online (Sandbox Code Playgroud)

google-app-engine go google-cloud-datastore

1
推荐指数
1
解决办法
125
查看次数

在golang中将字符串转换为json,反之亦然?

在我的应用程序中,我从客户端收到一个 json。这个 json 可以是任何东西,因为用户定义了键和值。在后端,我将它作为字符串存储在数据存储中。

现在我试图覆盖 MarshalJson / UnmarshalJson 函数,以便我从客户端发送/接收的不是字符串而是 json。

我不知道如何在 go 中将字符串转换为 json。

我的结构

type ContextData string
type Iot struct {
Id              IotId       `json:"id,string" datastore:"-" goon:"id"`
Name            string   `json:"name"`
Context         ContextData  `json:"context" datastore:",noindex"` }
Run Code Online (Sandbox Code Playgroud)

接收数据示例

{ 'id' : '',
  'name' '',
  'context': {
           'key1': value1,
           'key2': value2 }}
Run Code Online (Sandbox Code Playgroud)

我想如何将此 Context 字段存储在数据存储中作为'{'key1':value1, 'key2':value2}' 我想发送的数据的 noindex 字符串示例

{ 'id' : '',
  'name' '',
  'context': {
           'key1': value1,
           'key2': value2 }}
Run Code Online (Sandbox Code Playgroud)

google-app-engine go google-cloud-datastore

1
推荐指数
2
解决办法
9054
查看次数

Google 数据存储锁定超时

我想知道如果我在 Google Datastore 中运行一个事务并且在我无法完成事务的过程中发生了一些事情(比如应用程序服务器在等待响应时死亡)会发生什么。此时,事务将锁定实体。如何在不删除/重新启动/等的情况下干净地解锁实体?是否存在任何类型的超时(例如,如果事务失败的时间超过 10 秒)?

google-app-engine transactions google-cloud-datastore

1
推荐指数
1
解决办法
571
查看次数

如何用jinja2渲染整个字符串

我正在建立一个博客,开始在python中的Google App Engine中完成家庭作业,我正在使用jinja2来渲染我的html.我的问题是,当一个条目太长时,就像每个博客一样; 博客只是在主页面中呈现条目的一部分.我想这样做,当主页面呈现时,我从数据库中取出帖子并将其粘贴到jinja.是否有任何过滤器或函数告诉jinja,例如,这个字符串不能超过x数?

python google-app-engine jinja2 google-cloud-datastore

1
推荐指数
1
解决办法
3997
查看次数

在golang中没有得到datastore.GetAll的结果

我有两个函数:一个将实体写入数据存储区,另一个函数用于检索它们.当我datastore.GetAll()在检索中使用函数时,它不返回任何结果.我确实有一个测试,证明写作似乎正常.关于为什么检索不起作用的任何想法?

这是应用程序代码:

package tracker

import (
   "fmt"

   "appengine"
   "appengine/datastore"
)

type User struct {
    Email string
}

func createUser(ctx appengine.Context, email string) (*datastore.Key, error) {
    u := &User{
        Email: email,
        }
    incompleteKey := datastore.NewIncompleteKey(ctx, "User", nil)
    key, err := datastore.Put(ctx, incompleteKey, u)
    if err != nil {
        return key, err
    }

    return key, nil
}

func getUser(ctx appengine.Context, email string) (u *User, e error) {
    users := []User{}
    q := datastore.NewQuery("User").Filter("Email", email)
    keys, err := q.GetAll(ctx, &users)
    if …
Run Code Online (Sandbox Code Playgroud)

testing google-app-engine go google-cloud-datastore

1
推荐指数
1
解决办法
760
查看次数

BigQuery 与 Cloud Spanner 中 SQL 的限制

在比较 Cloud Spanner 与 BigQuery 时,我试图弄清楚与 ANSI SQL(仅限选择部分)相比,BigQuery 在 SQL 中存在哪些限制?

BigQuery 是否支持 ANSI SQL 的所有复杂联接?

此外,有什么是 Cloud Spanner 可以做而 BigQuery 不能做的吗?

google-bigquery google-cloud-platform google-cloud-spanner

1
推荐指数
1
解决办法
3838
查看次数

在python中删除谷歌数据存储中的实体

我想根据电子邮件删除/修改谷歌云数据存储中的实体。

email = 'john@gmail.com'
query = client.query('email', '=', email)
# delete this entity if it exists??
Run Code Online (Sandbox Code Playgroud)

现在我有这个查询,我该如何删除这个实体?

python google-cloud-datastore google-cloud-platform

1
推荐指数
1
解决办法
3822
查看次数

检查Firestore中是否存在用户

我想在Cloud Firestore中创建一个用户数据库,其中电子邮件是每个用户的唯一ID.用户应该在a中collection,每个用户都是a document.

这是我检查用户是否存在于登录活动中的方式:

FirebaseFirestore db = FirebaseFirestore.getInstance();
                            final DocumentReference userRef = db.collection("users").document(email);
                            userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                    if (task.isSuccessful()) {
                                        DocumentSnapshot document = task.getResult();

                                        Toast.makeText(LoginActivity.this, task.getResult().toString(),
                                                Toast.LENGTH_SHORT).show();

                                        if (document != null) {
                                            //The user exists...
                                        }


                                        else {
                                            //The user doesn't exist...
                                           }

                                        }
                                    }
                                    else
                                        connectionErrorActivity();

                                }
                            });
Run Code Online (Sandbox Code Playgroud)

数据库为空,如您所见:

在此输入图像描述

我的问题是,document即使数据库是空的,也永远不会为空.toast显示,该字符串值document是:COM.GOOGLE.FIREBASE.FIRESTORE.DOCUMENTSNAPSHOT@8ED6B96.

这是正确的方法吗?我该怎么办才能修复它?

android firebase google-cloud-firestore

1
推荐指数
1
解决办法
4969
查看次数