Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 谷歌应用引擎返回空查询_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 谷歌应用引擎返回空查询

Python 谷歌应用引擎返回空查询,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我正在尝试在appengine上构建一个web应用程序,在某个特定点上,我需要一个函数来构造一个列表属性,其中包含来自不同组的一个成员。如果我使用Sqlite数据库和web.py数据库模块来管理计算,我可以实现我需要的功能,如下所示: db = web.database(dbn='sqlite',db=':memory:') db.query("CREATE TABLE seq_list (seq TEXT, seq_pickle TEXT);") # do some stuff to the

我正在尝试在appengine上构建一个web应用程序,在某个特定点上,我需要一个函数来构造一个列表属性,其中包含来自不同组的一个成员。如果我使用Sqlite数据库和web.py数据库模块来管理计算,我可以实现我需要的功能,如下所示:

db = web.database(dbn='sqlite',db=':memory:')
db.query("CREATE TABLE seq_list (seq TEXT, seq_pickle TEXT);")

# do some stuff to the database

def getUnique():
    uniq_entries = db.query("SELECT DISTINCT seq FROM seq_list;")
    if not uniq_sequences:
        for entry in uniq_entries:
            seq_query = db.query("SELECT * FROM seq_list WHERE seq='" + str(entry.seq) +"';")
            seq_obj = pickle.loads(seq_query[0].seq_pickle)
            self.uniq_sequences.append(seq_obj)
但我在应用程序引擎中很难让它正常工作

class SeqObj(db.Model):
    seq = db.TextProperty(required = True)
    seq_pickle = db.TextProperty(required = True)

# do some stuff to the database

def getUnique():
    entries = db.GqlQuery("SELECT * FROM SeqObj")
    entries = list(entries)
    if not uniq_sequences:
        unique_entries = set([entry.seq for entry in entries])

        # this prints the unique entries correctly
        print unique_entries

        for entry in unique_entries:
            try:
                 q = "SELECT * FROM SeqObj WHERE seq='%s'"% entry
                 print q
                 seq_query = db.GqlQuery(q)

                 # these are the lines that break it
                 seq_obj = pickle.loads(seq_query[0].seq_pickle)
                 uniq_sequences.append(seq_obj)
                 print entry
            except:
                 pass
try/except用于显示打印语句。这将输出一些测试数据:

set([u'DXTMT', u'DIXTX', u'XSXDV', u'XI*MT'])
SELECT * FROM SeqObj WHERE seq='DXTMT'
SELECT * FROM SeqObj WHERE seq='DIXTX'
SELECT * FROM SeqObj WHERE seq='XSXDV'
SELECT * FROM SeqObj WHERE seq='XI*MT'
当我没有把所有的东西都放在试抓块上时,我会

IndexError: The query returned fewer than 1 results

我不知道出了什么问题,因为我知道返回了唯一的序列,查询看起来也像我期望的那样,并且我可以验证条目是否在数据存储中。非常感谢您的帮助。

问题是您无法筛选未索引的属性(TextProperty未索引)。有关详细信息,请参阅

如果已知
seq
字段少于500个字符,请尝试使用StringProperty


此外,在这些情况下,我始终建议首先在数据存储查看器中运行查询。它建议您运行所需查询所需的索引。

问题是您无法筛选未索引的属性(TextProperty未索引)。有关详细信息,请参阅

如果已知
seq
字段少于500个字符,请尝试使用StringProperty


此外,在这些情况下,我始终建议首先在数据存储查看器中运行查询。它建议运行所需查询所需的索引。

这是在dev_appserver上还是在真正的appengine服务器上出现的故障


如果它在dev_appserver上工作,但在真实服务器上不工作,那么我猜您可能缺少真实服务器上的一些索引。

这是在dev_appserver上还是在真实应用引擎服务器上出现的故障


如果它在dev_appserver上工作,但在真实服务器上不工作,那么我猜您可能缺少真实服务器上的一些索引。

解决了我的问题,谢谢。因为我处理的数据是DNA或蛋白质序列,所以在一些用例中,我需要一个长度超过500个字符的字段。您知道创建包含长文本块的索引字段的解决方法吗?您通常会添加另一个名为seq_hash或seq_id的字段,该字段表示字段的校验和,然后按该字段进行搜索。如果您计划有许多seq_OBJ,而没有很多不同的seq,那么您甚至可以有另一个名为SeqID的模型,具有字段seq和seq_id。然后您的第一个查询将从该模型中获取所有不同的seq_id,您将使用它们来查询SeqObj模型。还请注意,当前模型将从数据存储中获取大部分实体。如果您使用NDB,它将为您提供一条有用的错误消息,而不是一个空结果:“BadFilterError:无法查询未索引的属性seq”。解决了我的问题,谢谢。因为我处理的数据是DNA或蛋白质序列,所以在一些用例中,我需要一个长度超过500个字符的字段。您知道创建包含长文本块的索引字段的解决方法吗?您通常会添加另一个名为seq_hash或seq_id的字段,该字段表示字段的校验和,然后按该字段进行搜索。如果您计划有许多seq_OBJ,而没有很多不同的seq,那么您甚至可以有另一个名为SeqID的模型,具有字段seq和seq_id。然后您的第一个查询将从该模型中获取所有不同的seq_id,您将使用它们来查询SeqObj模型。还请注意,当前模型将从数据存储中获取大多数实体。如果您使用NDB,它将为您提供有用的错误消息,而不是空结果:“BadFilterError:无法查询未索引的属性seq”。