Как выполнять транзакции с помощью облачного хранилища данных Google с помощью библиотеки google-cloud-ndb в python3 - PullRequest
1 голос
/ 04 апреля 2020

Привет! Я разрабатываю приложение в python3 с использованием фрейма flask, который будет выполняться на стандартном appengine, который использует облачное хранилище данных для персистентности

Я хочу выполнить транзакции

поэтому я попробовал следующее i

@ndb.transactional()
def update_user(req_data):
    print("running for req")
    print(req_data)
    query = TestUser.query(ndb.AND(TestUser.age=="1"))
    with client.context():
        result = query.get()
        if result.name == "the one":
            print("not writing")
            return
        else:
            print(result.name+ " is not equal to 'the one'")
            print(result.name)
        result.name = req_data["name"]
        result.put()

    print("transaction ended")

@app.route('/test_req',methods=['POST'])
def test_req_handler():
    req_data = request.get_json()
    update_user(req_data)

    print(req_data)
    return "ok"

В локальной среде разработки, когда я нажимаю на обработчик / test_req, я получаю следующую ошибку

\lib\site-packages\google\cloud\ndb\context.py", line 72, in get_context
    raise exceptions.ContextError()
google.cloud.ndb.exceptions.ContextError: No current context. NDB calls must be made in context established by google.cloud.ndb.Client.context.

при удалении @ndb. сущности декоратора транзакции () обновляются, и ошибки нет

1 Ответ

0 голосов
/ 06 апреля 2020

В исходном облачном хранилище данных разрешены только транзакции в запросах предков. Эмулятор все еще применяет это ограничение. Это изменение отмечено в https://cloud.google.com/datastore/docs/upgrade-to-firestore.

...