참고: 새로운 애플리케이션을 빌드하는 개발자는 NDB 클라이언트 라이브러리를 사용하는 것이 좋습니다. NDB 클라이언트 라이브러리는 이 클라이언트 라이브러리와 비교할 때 Memcache API를 통한 자동 항목 캐싱과 같은 여러 이점이 있습니다. 현재 이전 DB 클라이언트 라이브러리를 사용 중인 경우 DB에서 NDB로의 마이그레이션 가이드를 참조하세요.
이 페이지에서 설명하는 함수는 google.appengine.ext.db
패키지에 정의되어 있습니다.
함수
- allocate_ids (model, count)
-
데이터 저장소 종류 및 상위 조합에 대해 데이터 저장소에 ID 배치를 할당합니다.
이 방법으로 할당된 ID는 Datastore의 자동 ID 시퀀스 생성기에서 사용되지 않으며 항목 키에서 충돌 없이 사용할 수 있습니다.
인수
- model
- ID 배치를 할당할 모델 키입니다. 일반 키이지만 사용할 ID 시퀀스를 결정하기 위해서는 키의 상위 요소 및 종류만 있으면 됩니다.
- count
- 할당할 ID 수입니다.
할당하는 첫 번째와 마지막 ID의 튜플을 반환합니다. 예를 들어 이 함수를 사용하여 10개의 ID를 할당한 경우 생성된 ID의 전체 목록이 아닌 (1, 10) 형식으로 반환합니다.
ID 할당 및 사용 예:
# allocate for MyModel without an instance handmade_key = db.Key.from_path('MyModel', 1) first_batch = db.allocate_ids(handmade_key, 10) first_range = range(first_batch[0], first_batch[1] + 1) # or allocate using an existing key model_instance = MyModel.all().get() second_batch = db.allocate_ids(model_instance.key(), 10) second_range = range(second_batch[0], second_batch[1] + 1) # and then use them! woo! my_id = second_range.pop(0) new_key = db.Key.from_path('MyModel', my_id) new_instance = MyModel(key=new_key) new_instance.put() assert new_instance.key().id() == my_id # the Datastore will not assign ids in first_batch or second_batch another_instance = MyModel() another_instance.put() assert another_instance.key().id() not in first_range assert another_instance.key().id() not in second_range
- allocate_ids_async (model, count)
-
Datastore 종류 및 상위 조합에 대한 ID 배치를 Datastore에 비동기적으로 할당합니다.
이 함수는 비동기 객체를 반환한다는 점을 제외하면
allocate_ids()
와 동일합니다. 반환 값에서get_result()
를 호출하여 호출을 차단하고 결과를 반환할 수 있습니다.인수
- model
db.Model
인스턴스, 키, 문자열로 ID를 할당할 ID 시퀀스를 지정하는 템플릿 역할을 합니다. 반환된 ID는 이 키와 상위 요소와 종류가 같은 항목에서만 사용해야 합니다.- count
- 할당할 ID 수입니다.
할당하는 첫 번째와 마지막 ID의 튜플을 반환합니다. 예를 들어 이 함수를 사용하여 10개의 ID를 할당한 경우 생성된 ID의 전체 목록이 아닌 (1, 10) 형식으로 반환합니다.
- allocate_id_range (model, start, end, **kwargs)
-
특정 엔드포인트를 가진 ID 범위를 할당합니다. 이 ID가 할당되면 새로 생성된 항목에 수동으로 할당할 수 있습니다.
데이터 저장소의 자동 ID 할당자는 이미 할당된 키(자동 ID 할당 또는 명시적 'allocate_ids' 호출을 통해)를 절대 할당하지 않습니다. 결과적으로 주어진 키 범위에 쓰인 항목은 절대 덮어 쓰이지 않습니다. 하지만 이 범위에 수동으로 할당된 키를 가진 항목을 쓰는 경우 반환된 키 범위 상태에 따라 기존 항목(또는 별도의 요청으로 쓰인 새 항목)을 덮어쓸 수 있습니다.
예약하려는 기존 숫자 ID 범위(예: 이미 ID를 가진 일괄 로드 항목)가 있는 경우에만 이 함수를 사용하세요. 어떤 ID를 수신하든지 상관이 없다면
allocate_ids()
를 대신 사용합니다.인수
- model
db.Model
인스턴스, 키, 문자열로 ID를 할당할 ID 시퀀스를 지정하는 템플릿 역할을 합니다. 반환된 ID는 이 키와 상위 요소와 종류가 같은 항목에서만 사용해야 합니다.- start
- 할당할 첫 번째 ID입니다. 숫자로 되어 있습니다.
- end
- 할당할 마지막 ID입니다. 숫자로 되어 있습니다.
(
KEY_RANGE_EMPTY
,KEY_RANGE_CONTENTION
,KEY_RANGE_COLLISION
) 중 하나를 반환합니다.KEY_RANGE_EMPTY
가 아니면 할당된 키 범위 사용과 관련된 잠재적인 문제를 나타냅니다. - create_transaction_options (**kwargs)
-
트랜잭션 실행을 제어하는 트랜잭션 옵션 객체(클래스
TransactionOptions
)를 만듭니다. 결과 객체를 첫 번째 인수로run_in_transaction_options()
함수에 전달합니다.인수
- propagation
- 이 트랜잭션 함수가 다른 트랜잭션 내에서 호출된 경우 수행할 작업입니다.
- ALLOWED
- 이미 트랜잭션 중인 경우 계속해서 사용합니다. 그렇지 않은 경우 트랜잭션을 시작합니다.
참고: 이 정책을 사용하는 함수에서 예외가 발생할 경우 예외를 포착하고 외부 트랜잭션을 커밋하는 것이 안전하지 않을 수 있으며, 함수로 인해 외부 트랜잭션이 좋지 않은 상태로 남겨질 수 있습니다.
- 필수
- 기존 트랜잭션이 있는 경우 계속합니다. 그렇지 않은 경우
BadRequestError
예외를 발생시킵니다.참고: 이 정책을 사용하는 함수에서 예외가 발생할 경우 예외를 포착하고 외부 트랜잭션을 커밋하는 것이 안전하지 않을 수 있으며, 함수로 인해 외부 트랜잭션이 좋지 않은 상태로 남겨질 수 있습니다.
- INDEPENDENT
- 기존 트랜잭션을 일시 중지하고 새 트랜잭션을 만듭니다.
참고: 항목이 외부 트랜잭션과 일관성을 유지하지 않으므로 이 정책을 사용하는 함수는 새 트랜잭션에서 읽은 항목을 반환하지 않습니다.
- NESTED
- (아직 지원되지 않음) 기존 트랜잭션 내에 중첩 트랜잭션을 만듭니다.
- xg
True
인 경우 교차 그룹(XG) 트랜잭션을 허용합니다. 비부울 값으로 설정된 경우BadArgumentError
예외가 발생합니다.- retries
- 트랜잭션 커밋이 실패할 경우 다시 시도할 재시도 횟수입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 빠르게 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
다음은 후속 교차 그룹(XG) 트랜잭션 옵션을 만드는 예입니다.
from google.appengine.ext import db xg_on = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_on, my_txn)
- delete (models, deadline=60)
-
데이터 저장소에서 하나 이상의 모델 인스턴스를 삭제합니다.
인수
- models
- 모델 인스턴스, 항목 키 또는 모델 인스턴스 목록(또는 다른 반복 가능 항목) 또는 삭제할 항목 키입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 바로 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
put()
과 마찬가지로 키가 여러 개 제공된 경우 항목 그룹이 2개 이상 있을 수 있습니다.항목 중 일부가 실제로 삭제되었더라도 작업 중 오류가 일어난 경우 언제나 예외가 발생합니다. 예외가 발생하지 않고 호출이 반환된 경우 모든 항목이 성공적으로 삭제된 것입니다.
주의: 트랜잭션 내에서 작업이 수행된 경우를 제외하고는 단일 작업에서 여러 개의 항목을 삭제했다고 해서 삭제가 원자적으로 수행되는 것은 아닙니다. 쿼리가 강력한 일관성을 가지고 수행되었다고 하더라도 데이터 저장소를 쿼리하는 다른 프로세스에는 일관적이지 않은 결과가 표시될 수 있습니다.
- delete_async (models, deadline=60)
-
Datastore에서 하나 이상의 모델 인스턴스를 비동기적으로 삭제합니다.
이 함수는 비동기 객체를 반환한다는 점을 제외하면
delete()
와 동일합니다. 반환 값에서get_result()
를 호출하여 호출을 차단할 수 있습니다.인수
- models
- 모델 인스턴스, 항목 키 또는 모델 인스턴스 목록(또는 다른 반복 가능 항목) 또는 삭제할 항목 키입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 바로 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
put()
과 마찬가지로 키가 여러 개 제공된 경우 항목 그룹이 2개 이상 있을 수 있습니다.이 함수는 호출 결과를 차단할 수 있는 객체를 반환합니다.
항목 중 일부가 실제로 삭제되었더라도 작업 중 오류가 일어난 경우 언제나 예외가 발생합니다. 예외가 발생하지 않고 호출이 반환된 경우 모든 항목이 성공적으로 삭제된 것입니다.
주의: 트랜잭션 내에서 작업이 수행된 경우를 제외하고는 단일 작업에서 여러 개의 항목을 삭제했다고 해서 삭제가 원자적으로 수행되는 것은 아닙니다. 쿼리가 강력한 일관성을 가지고 수행되었다고 하더라도 데이터 저장소를 쿼리하는 다른 프로세스에는 일관적이지 않은 결과가 표시될 수 있습니다.
- get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
데이터 저장소에서 주어진 키를 가진 특정 모델 인스턴스를 가져옵니다.
인수
- keys
- 검색할 항목의 키, 키의 문자열 표현, 키 또는 해당 문자열 표현의 목록입니다.
- read_policy
- 원하는 수준의 데이터 일관성을 지정하는 읽기 정책입니다.
- STRONG_CONSISTENCY
- 최신 결과를 보장하지만 단일 항목 그룹으로 제한됩니다.
- EVENTUAL_CONSISTENCY
- 여러 항목 그룹을 포괄할 수 있지만 경우에 따라 오래된 결과를 반환하는 경우가 있습니다. 일반적으로 최종 일관성을 지닌 쿼리는 강력한 일관성을 지닌 쿼리보다 더 빨리 실행되지만 아무것도 보장되지 않습니다.
참고: 상위가 아닌 전역 쿼리는 이 인수를 무시합니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 바로 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
keys
가 단일 키(또는 키의 문자열 표현)로 구성되어 있는 경우 이 함수는 키가 Datastore에 있으면 해당 키와 관련된 모델 인스턴스를 반환합니다. 그렇지 않으면None
을 반환합니다.keys
가 목록인 경우 반환값은 모델 인스턴스의 해당 목록이고, 지정된 키의 항목이 없는 경우None
입니다.Model.get()
도 참조하세요. - get_async (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Datastore에서 지정된 모델 인스턴스를 비동기적으로 가져옵니다.
이 함수는 비동기 객체를 반환한다는 점을 제외하면
get()
과 동일합니다. 반환 값에서get_result()
를 호출하여 호출을 차단하고 결과를 얻을 수 있습니다.인수
- keys
- 검색할 항목의 키, 키의 문자열 표현, 키 또는 해당 문자열 표현의 목록입니다.
- read_policy
- 원하는 수준의 데이터 일관성을 지정하는 읽기 정책입니다.
- STRONG_CONSISTENCY
- 최신 결과를 보장하지만 단일 항목 그룹으로 제한됩니다.
- EVENTUAL_CONSISTENCY
- 여러 항목 그룹을 포괄할 수 있지만 경우에 따라 오래된 결과를 반환하는 경우가 있습니다. 일반적으로 최종 일관성을 지닌 쿼리는 강력한 일관성을 지닌 쿼리보다 더 빨리 실행되지만 아무것도 보장되지 않습니다.
참고: 상위가 아닌 전역 쿼리는 이 인수를 무시합니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 바로 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
keys
가 단일 키(또는 키의 문자열 표현)로 구성되어 있는 경우 이 함수는 키가 Datastore에 있으면 해당 키와 관련된 모델 인스턴스를 반환합니다. 그렇지 않으면None
을 반환합니다.keys
가 목록인 경우 반환값은 모델 인스턴스의 해당 목록이고, 지정된 키의 항목이 없는 경우None
입니다.Model.get()
도 참조하세요. - get_indexes()
-
호출 애플리케이션에 속한 복합 색인의 목록을 반환합니다.
다음 예는 색인을 얻고 사용하는 방법을 보여줍니다.
def get_index_state_as_string(index_state): return {db.Index.BUILDING:'BUILDING', db.Index.SERVING:'SERVING', db.Index.DELETING:'DELETING', db.Index.ERROR:'ERROR'}[index_state] def get_sort_direction_as_string(sort_direction): return {db.Index.ASCENDING:'ASCENDING', db.Index.DESCENDING:'DESCENDING'}[sort_direction] def dump_indexes(): for index, state in db.get_indexes(): print "Kind: %s" % index.kind() print "State: %s" % get_index_state_as_string(state) print "Is ancestor: %s" % index.has_ancestor() for property_name, sort_direction in index.properties(): print " %s:%s" % (property_name, get_sort_direction_as_string(sort_direction))
- get_indexes_async ()
-
호출 애플리케이션에 속한 복합 색인의 목록을 비동기적으로 반환합니다.
- is_in_transaction ()
-
현재 범위가 트랜잭션에서 실행 중인지 여부를 나타내는 부울을 반환합니다.
- model_to_protobuf (model_instance)
-
Model
인스턴스의 프로토콜 버퍼 직렬화를 만듭니다. 프로토콜 버퍼는 원격 절차 호출에 사용되는 Google의 직렬화 형식으로 백업 및 복원 목적으로 Datastore 객체를 직렬화하는 데 유용합니다.주의: 이 함수는 오픈소스 프로토콜 버퍼 형식과 다른(이전의) 형식을 사용하며 오픈소스 구현과 호환되지 않습니다.
인수
- model_instance
- 직렬화할 클래스
Model
(또는 서브클래스)의 인스턴스입니다.
객체의 프로토콜 버퍼 직렬화를 바이트 문자열로 반환합니다.
- model_from_protobuf (pb)
-
프로토콜 버퍼 직렬화에 기반한
Model
인스턴스를 만듭니다. 자세한 내용은model_to_protobuf()
를 참조하세요.인수
- pb
model_to_protobuf()
로 반환되는 프로토콜 버퍼 직렬화입니다.
적절한 종류 클래스의 객체를 반환합니다. 종류 클래스가 없으면
KindError
예외가 발생합니다. 객체가 모델에 유효하지 않으면BadValueError
예외가 발생합니다.다른
Model
인스턴스와 마찬가지로put()
메서드의 호출 등을 통해 새 객체를 Datastore에 저장할 수 있습니다. 객체는 프로토콜 버퍼가 만들어졌을 때 가지고 있던 키를 보관합니다. 해당 키를 가지고 있는 객체가 이미 데이터 저장소에 있는 경우 비직렬화된 객체를 저장하면 기존 객체에 덮어쓰기됩니다.주의: 객체의 키가 시스템에서 할당한 ID를 사용하고 ID가 이미 주어진 경로와 종류에 할당되어 있지 않은 경우 저장할 수는 있지만 ID는 예약되지 않습니다. 이후에 만들어진 객체가 해당 ID에 할당될 수 있으며 이전 객체를 덮어쓰기할 수 있습니다. 안전을 위해 직렬화되었을 때에 있었던 애플리케이션에서만 객체를 복원하세요.
- model_is_projection (model_instance)
-
지정된 쿼리(
model_instance
)가 전체 항목의 쿼리가 아닌 프로젝션 쿼리인 경우True
를 반환합니다.인수
- model_instance
- 프로젝션 쿼리인지 결정하기 위해 확인하는 쿼리입니다.
쿼리가 프로젝션 쿼리이면
True
를, 그렇지 않으면False
를 반환합니다. - put (models, deadline=60)
-
Datastore에 하나 이상의 모델 인스턴스를 씁니다.
인수
- models
- 저장할 모델 인스턴스 또는 모델 인스턴스 목록입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 빠르게 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
여러 개의 모델 인스턴스가 주어진 경우 하나 이상의 항목 그룹이 있을 수 있습니다.
항목 중 일부가 실제로 쓰였더라도 작업 중 오류가 일어난 경우 언제나 예외가 발생합니다. 예외가 발생하지 않고 호출이 반환된 경우 모든 항목이 성공적으로 쓰인 것입니다.
models
가 단일 모델 인스턴스로 구성되어 있는 경우 이 함수는 해당하는 키 객체를 반환합니다.models
가 목록이라면 반환값은 해당하는 키 객체의 목록입니다.주의: 트랜잭션 내에서 작업이 수행된 경우를 제외하고는 단일 작업에서 여러 개의 항목을 썼다고 해서 쓰기가 원자적으로 수행되지는 않습니다. 쿼리가 강력한 일관성을 가지고 수행되었다고 하더라도 데이터 저장소를 쿼리하는 다른 프로세스에는 일관적이지 않은 결과가 표시될 수 있습니다.
- put_async (models, deadline=60)
-
Datastore에 하나 이상의 모델 인스턴스를 씁니다.
이 함수는 비동기 객체를 반환한다는 점을 제외하면
put()
과 동일합니다. 반환 값에서get_result()
를 호출하여 호출을 차단하고 결과를 얻을 수 있습니다.인수
- models
- 저장할 모델 인스턴스 또는 모델 인스턴스 목록입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 빠르게 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
여러 개의 모델 인스턴스가 주어진 경우 하나 이상의 항목 그룹이 있을 수 있습니다.
항목 중 일부가 실제로 쓰였더라도 작업 중 오류가 일어난 경우 언제나 예외가 발생합니다. 예외가 발생하지 않고 호출이 반환된 경우 모든 항목이 성공적으로 쓰인 것입니다.
이 함수는
get_result()
를 호출할 수 있는 비동기 객체를 반환합니다. 반환된 결과는put()
과 동일합니다.주의: 트랜잭션 내에서 작업이 수행된 경우를 제외하고는 단일 작업에서 여러 개의 항목을 썼다고 해서 쓰기가 원자적으로 수행되지는 않습니다. 쿼리가 강력한 일관성을 가지고 수행되었다고 하더라도 데이터 저장소를 쿼리하는 다른 프로세스에는 일관적이지 않은 결과가 표시될 수 있습니다.
- query_descendants (model_instance)
-
모델 인스턴스의 모든 하위 요소에 대한 쿼리를 반환합니다.
인수
- model_instance
- 하위 요소를 찾을 모델 인스턴스입니다.
- run_in_transaction (function, *args, **kwargs)
-
단일 트랜잭션에서 데이터 저장소 업데이트가 포함된 함수를 실행합니다. 트랜잭션 중 코드 예외가 하나라도 발생하면 트랜잭션에서 일어난 모든 업데이트가 롤백됩니다. 또는
@db.transactional()
데코레이터를 사용할 수 있습니다.인수
- 함수
- 실행할 함수입니다.
- args
- 함수에 전달할 위치 인수입니다.
- kwargs
- 함수에 전달할 키워드 인수입니다.
함수가 값을 반환하면
run_in_transaction()
이 호출자에게 값을 반환합니다.함수에서 예외가 발생하면 트랜잭션은 롤백됩니다.
Rollback
예외가 발생하면 다시 롤백되지 않습니다. 다른 예외인 경우 호출자에게 다시 롤백됩니다.Datastore는 트랜잭션에 낙관적 잠금 및 재시도를 사용합니다. 함수가 준비한 트랜잭션을 커밋할 수 없는 경우
run_in_transaction()
은 함수를 다시 호출하여 최대 3번 트랜잭션을 재시도합니다. 다른 재시도 횟수를 사용하려면run_in_transaction_custom_retries()
를 사용합니다. 트랜잭션 함수가 단일 트랜잭션에 대해 두 번 이상 호출될 수 있으므로 함수에는 인수 수정을 비롯한 부작용이 없어야 합니다.높은 경합률 등의 이유로 트랜잭션을 커밋할 수 없으면
TransactionFailedError
예외가 발생합니다.from google.appengine.ext import db class Counter(db.Model): name = db.StringProperty() count = db.IntegerProperty(default=0) def decrement(key, amount=1): counter = db.get(key) counter.count -= amount if counter.count < 0: # Don't let counter go negative raise db.Rollback() db.put(counter) q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "foo") counter = q.get() db.run_in_transaction(decrement, counter.key(), amount=5)
- run_in_transaction_custom_retries (retries, function, *args, **kwargs)
-
단일 트랜잭션에서 데이터 저장소 업데이트가 포함된 함수를 실행하여 경합이 발생할 경우 지정된 횟수만큼 트랜잭션을 재시도합니다. 트랜잭션 중 코드 예외가 하나라도 발생하면 트랜잭션에서 일어난 모든 업데이트가 롤백됩니다.
재시도 횟수를 지정하는 기능을 제외하면 이 함수는
run_in_transaction()
과 동일하게 동작합니다.인수
- retries
- 항목 그룹 내에서 경합이 발생할 경우 함수를 호출하는 최대 횟수입니다(둘 이상의 사용자가 동시에 그룹을 수정하려고 시도함).
- 함수
- 실행할 함수입니다.
- args
- 함수에 전달할 위치 인수입니다.
- kwargs
- 함수에 전달할 키워드 인수입니다.
- run_in_transaction_options (options, function, *args, **kwargs)
-
단일 트랜잭션에서 트랜잭션 옵션 객체에 지정된 옵션을 사용하여 데이터 저장소 업데이트가 포함된 함수를 실행합니다. 트랜잭션 중 코드 예외가 하나라도 발생하면 트랜잭션에서 일어난 모든 업데이트가 롤백됩니다.
교차 그룹(XG) 트랜잭션의 경우 트랜잭션 옵션 객체의
xg
매개변수는True
로 설정해야 합니다.인수
- 옵션
- 이 트랜잭션에서 사용된 설정을 포함하는 트랜잭션 옵션 객체입니다. XG 트랜잭션을 사용 설정하려면 xg 매개변수를
True
로 설정해야 합니다. - 함수
- 실행할 함수입니다.
- args
- 함수에 전달할 위치 인수입니다.
- kwargs
- 함수에 전달할 키워드 인수입니다.
함수가 값을 반환하면
run_in_transaction_options()
가 호출자에게 값을 반환합니다.함수에서 예외가 발생하면 트랜잭션은 롤백됩니다.
Rollback
예외가 발생하면 다시 롤백되지 않습니다. 다른 예외인 경우 호출자에게 다시 롤백됩니다.Datastore는 트랜잭션에 낙관적 잠금 및 재시도를 사용합니다. 함수가 준비한 트랜잭션을 커밋할 수 없는 경우
run_in_transaction_options()
는 함수를 다시 호출하여 트랜잭션 옵션 객체에 지정된 재시도 횟수까지 트랜잭션을 재시도합니다. 단일 트랜잭션에 대해 트랜잭션 함수가 2번 이상 호출될 수 있으므로 함수에는 인수 수정 사항을 비롯한 부작용이 없어야 합니다.높은 경합률 등의 이유로 트랜잭션을 커밋할 수 없으면
TransactionFailedError
예외가 발생합니다.다음 예에서는 이 함수를 사용하여 교차 그룹 트랜잭션을 실행하는 방법을 보여줍니다.
from google.appengine.ext import db xg_options = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_options, my_txn)
- to_dict (model_instance, dictionary=None)
-
모델 인스턴스의 사전 표현을 만들고 반환합니다.
인수
- model_instance
- 복사할 모델 인스턴스입니다.
- dictionary
- 사전이 있는 경우, 모델의 데이터를 병합할 사전입니다. 모델 값은 사전의 값을 덮어씁니다. 모델 인스턴스의 필드에 해당하지 않는 사전 항목은 보존됩니다.
데코레이터
- @db.transactional (propagation=ALLOWED, xg=False, retries=3, deadline=60)
-
함수가
db
트랜잭션 내에서 실행되도록 합니다. 따라서run_in_transaction(func)
을 호출하는 대신func()
를 호출할 수 있습니다.인수
- propagation
- 이 트랜잭션 함수가 다른 트랜잭션 내에서 호출된 경우 수행할 작업입니다.
- ALLOWED
- 이미 트랜잭션 중인 경우 계속해서 사용합니다. 그렇지 않은 경우 트랜잭션을 시작합니다.
참고: 이 정책을 사용하는 함수에서 예외가 발생할 경우 예외를 포착하고 외부 트랜잭션을 커밋하는 것이 안전하지 않을 수 있으며, 함수로 인해 외부 트랜잭션이 좋지 않은 상태로 남겨질 수 있습니다.
- 필수
- 기존 트랜잭션이 있는 경우 계속합니다. 그렇지 않은 경우
BadRequestError
예외를 발생시킵니다.참고: 이 정책을 사용하는 함수에서 예외가 발생할 경우 예외를 포착하고 외부 트랜잭션을 커밋하는 것이 안전하지 않을 수 있으며, 함수로 인해 외부 트랜잭션이 좋지 않은 상태로 남겨질 수 있습니다.
- INDEPENDENT
- 기존 트랜잭션을 일시 중지하고 새 트랜잭션을 만듭니다.
참고: 항목이 외부 트랜잭션과 일관성을 유지하지 않으므로 이 정책을 사용하는 함수는 새 트랜잭션에서 읽은 항목을 반환하지 않습니다.
- NESTED
- (아직 지원되지 않음) 기존 트랜잭션 내에 중첩 트랜잭션을 만듭니다.
- xg
True
인 경우 교차 그룹(XG) 트랜잭션을 허용합니다. 비부울 값으로 설정된 경우BadArgumentError
예외가 발생합니다.- retries
- 트랜잭션 커밋이 실패할 경우 다시 시도할 재시도 횟수입니다.
- deadline
- 오류가 발생하여 중단되기 전 Datastore에서 결과를 반환하기까지 기다리는 최대 시간(초)입니다. 정수 또는 부동 소수점 값을 허용합니다. 기본값(60초)보다 높게 설정할 수는 없지만 특정 작업의 실패가 빠르게 도출될 수 있도록 낮게 조정할 수는 있습니다(예: 사용자에게 응답을 더 빨리 반환, 작업 재시도, 다른 작업 시도, 태스크 큐에 작업 추가).
- @db.non_transactional (allow_existing=True)
-
트랜잭션 내에서 호출된 경우에도 함수가
db
외부에서 실행되도록 합니다.인수
- allow_existing
True
인 경우 기존 트랜잭션 내에서 함수가 호출되도록 허용합니다.False
인 경우 대신BadRequestError
예외를 발생시킵니다.