Python2.7、GAE、および高レプリケーションデータストアを使用しています。最初にエンティティを書き込み、次にそれを読み取るトランザクションを実行しようとしていますが、読み取りによってエンティティが見つかりません。これは私が持っているテストケースです:
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は、書き込みを実行するトランザクションを実行しています。次に、2つの読み取りを実行する2番目のトランザクションを実行します。1つはキーによるもので、もう1つは祖先クエリによるものです。この場合、読み取りは問題なく機能します。
Test2はtest1とまったく同じコードを実行していますが、今回はすべてが同じトランザクション内で実行されます。ご覧のとおり、エンティティをキーで読み取ると、Noneが返されます。祖先クエリを実行すると、0ヒットが返されます。
私の質問は、トランザクション内で、今書いたエンティティをどのように読み取ることができるかということです。それともこれは不可能ですか?
ありがとう。