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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 Model.get_或_insert()在应用程序引擎中是如何成为祖先事务的_Python_Google App Engine_Transactions_Bigtable - Fatal编程技术网

Python Model.get_或_insert()在应用程序引擎中是如何成为祖先事务的

Python Model.get_或_insert()在应用程序引擎中是如何成为祖先事务的,python,google-app-engine,transactions,bigtable,Python,Google App Engine,Transactions,Bigtable,我不明白google app engine for python的模型。get\u或\u insert(key\u name,**kwds)方法是如何工作的 据我所知,事务中的所有数据存储操作都必须是祖先查询。但是,我看不出Model.get\u或\u insert(key\u name,**kwds)的文档是如何作为祖先查询的。对于以下示例,由于最后一行的参数中未指定“parent”,第二行中的parent=kwds.get('parent')的结果是否会是None,从而将查询作为祖先查询求反

我不明白google app engine for python的
模型。get\u或\u insert(key\u name,**kwds)
方法是如何工作的

据我所知,事务中的所有数据存储操作都必须是祖先查询。但是,我看不出
Model.get\u或\u insert(key\u name,**kwds)
的文档是如何作为祖先查询的。对于以下示例,由于最后一行的参数中未指定“parent”,第二行中的
parent=kwds.get('parent')
的结果是否会是
None
,从而将查询作为祖先查询求反

def txn(key_name, **kwds):
    entity = Story.get_by_key_name(key_name, parent=kwds.get('parent')) # parent is not defined?
    if entity is None:
        entity = Story(key_name=key_name, **kwds)
        entity.put()
    return entity

def get_or_insert(key_name, **kwargs):
    return db.run_in_transaction(txn, key_name, **kwargs)

get_or_insert('some key', title="The Three Little Pigs")  # no parent specified
()

我并不是在这里吹毛求疵,我只是在理解如何在我自己的应用程序中正确使用事务时遇到了困难,我希望通过本文档来增强我的理解


非常感谢你的帮助

只要事务中只有一个对象,就可以传递None祖先。

尝试创建/获取多个实体将引发异常。

只要事务中只有一个对象,就可以传递None祖先。

尝试创建/获取多个实体将引发异常。

您需要祖先查询来保证涉及多个实体的事务中的原子性。事务中的所有实体都需要共享同一个祖先。Model.get\u或\u insert()只检索一个实体,它显然与自身共享同一个祖先

关键路径/祖先决定了数据在应用程序引擎数据存储中的存储方式。具有共同祖先的实体存储在同一个数据库碎片上,这使得在不同步碎片的情况下更容易实现原子事务

如果您使用的是HRD,此时您可能正在使用,跨组事务也可以使用,尽管我不太确定它们在幕后是如何工作的。

您需要祖先查询来保证涉及多个实体的事务中的原子性。事务中的所有实体都需要共享同一个祖先。Model.get\u或\u insert()只检索一个实体,它显然与自身共享同一个祖先

关键路径/祖先决定了数据在应用程序引擎数据存储中的存储方式。具有共同祖先的实体存储在同一个数据库碎片上,这使得在不同步碎片的情况下更容易实现原子事务

如果您使用的是HRD,此时您可能正在使用,跨组事务也可以使用,尽管我不太确定它们在幕后是如何工作的。

将xg=True传递给transaction()函数。然后,您可以在事务回调中触及最多5个实体组,而不是仅限于一个。将xg=True传递给transaction()函数。然后,您可以在事务回调中触及最多5个实体组,而不是仅限于一个实体组。