我正在使用 Python2.7、GAE 和 High Replication 数据存储。我正在尝试执行一个事务,该事务首先写入一个实体然后读取它,但读取从未找到实体。这是我的一个测试用例:
class DemoTestCase(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0)
self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
def tearDown(self):
self.testbed.deactivate()
def test1(self):
db.run_in_transaction(self._write)
db.run_in_transaction(self._read)
def test2(self):
db.run_in_transaction(self._write_read)
def _write(self):
self.root_key = db.Key.from_path("A", "root")
a = A(a=1, parent=self.root_key)
self.a_key = a.put()
def _read(self):
b = sample.read_a(self.a_key)
self.assertEqual(1, b.a)
self.assertEqual(1, A.all().ancestor(self.root_key).count(5))
def _write_read(self):
root_key = db.Key.from_path("A", "root")
a = A(a=1, parent=root_key)
a_key = a.put()
b = sample.read_a(a_key)
self.assertEqual(None, b)
self.assertEqual(0, A.all().ancestor(root_key).count(5))
两个测试用例现在都通过了。
Test1 正在运行一个执行写入的事务。然后它运行第二个事务,执行两次读取,一次通过键读取,一次通过祖先查询。在这种情况下,读取工作得很好。
Test2 运行的代码与 test1 完全相同,但这次一切都在同一个事务中运行。如您所见,按键读取实体返回无。执行祖先查询返回 0 个命中。
我的问题是:如何在事务中读取我刚刚编写的实体?或者这是不可能的?
谢谢。