본문 바로가기

NDB

Datastore - NDB API(Python) : Transaction NDB 에서 Transaction을 사용하는 방법 기본적으로 아래와 같이 사용하면 된다. key = ndb.Key(Greeting, 'joe') @ndb.transactional def greet(): ent = key.get() if ent is None: ent = Greeting(key=key, message='Hey Joe') ent.put() return ent greet() ndb.transaction() 함수를 사용해도 된다. key = ndb.Key(Greeting, 'joe') def greet(): ent = key.get() if ent is None: ent = Greeting(key=key, message='Hey Joe') ent.put() return ent moraes = n.. 더보기
Datastore - NDB API(Python) : 데이터 조회 하기(Query) Property 값으로 데이터 필터링 하기 Model의 query 클래스를 활용한다. query에 필터를 추가하여 여러가지 조건을 적용 할 수 있다. 예를 통해 살펴 보자 # userid가 '123'인 데이터를 조회하고 싶은 경우 qry = Account.query() qry = Account.query(Account.userid == 123) rslt = qry.fetch() # 두가지 이상 조건을 적용 하고 싶은 경우 qry = Account.query(Account.userid >= 123, Account.userid < 456, ...) rslt = qry.fetch() # query를 중첩하여 여러가지 조건을 적용 할 수도 있다. qry = Account.query() qry1 = qry.fil.. 더보기
Datastore - NDB API(Python) : Property Type NDB에서 사용하는 Property Types Property typeDescriptionIntegerProperty64-bit signed integerFloatPropertyDouble-precision floating-point numberBooleanPropertyBooleanStringPropertyUnicode string; up to 500 characters, indexedTextPropertyUnicode string; unlimited length, not indexedBlobPropertyUninterpreted byte string: if you set indexed=True, up to 500 characters, indexed; if indexed is False (the def.. 더보기
Datastore - NDB API(Python) : Model Hooks 사용하기 (trigger 역할) DB에 어떤 작업을 하고난 이후 (또는 하기전에) 어떤 다른 작업이 자동으로 실행되도록 프로그래밍 할때 Hook를 사용한다. 간단한 사용법은 ndb.Model 클래스에 정의된 hook 함수를 오버라이드 하면 된다. hook 함수 목록은 아래와 같다. @classmethod def _pre_allocate_ids_hook(cls, size, max, parent): @classmethod def _post_allocate_ids_hook(cls, size, max, parent, future): @classmethod def _pre_delete_hook(cls, key): @classmethod def _post_delete_hook(cls, key, future): @classmethod def _pr.. 더보기
Datastore - NDB API(Python) : Entity의 구조를 정확히 모를때 (동적 Entity) 정확한 스키마 없이 Entity를 정의 하여 사용하고 싶은 경우가 있다. Entity를 다이나믹하게 사용하고 싶은경우가 있다. 보통은 ndb.Model 클래스를 상속해서 Entity를 정의하고 사용하지만 이런 경우에는 ndb.Expando를 상속해서 사용하면 된다. 예를 들면 class Mine(ndb.Expando): pass e = Mine() e.foo = 1 e.bar = 'blah' e.tags = ['exp', 'and', 'oh'] e.put() 이런식으로 정확한 Mine은 정의 하지 않았지만 실행시 foo, bar, tags 와 같은 속성들을 동적으로 생성 할 수 있다. 위 케이스 처럼 Model명만 정의하고 모든 속성들을 동적으로 생성해서 사용할 수 도 있지만, 이렇게 하면 검색시 어려움.. 더보기
Datastore - NDB API(Python) : Key를 이용한 데이터 삭제 key를 이용해서 데이터(entity)를 삭제 할 때는 delete() 함수를 사용하면 된다. 예로 sandy_key = ndb.Key('Account', 'Sandy') sandy_key.delete() 위와 같이 하면 삭제 된다. 여러 건을 한번에 삭제 하고 싶을 때는 ndb.delete_multi() 함수를 사용하면 된다. sandy_key = ndb.Key('Account', 'Sandy') sally_key = ndb.Key('Account', 'Sally') list_of_keys = list() list_of_keys.append(sandy_key) list_of_keys.append(sally_key) ndb.delete_multi(list_of_keys) 더보기
Datastore - NDB API(Python) : Key를 이용한 데이터 조회 Key를 이용해서 데이터를 조회 할 때는 Key 클래스의 get() 함수를 이용하면 된다. 간단히 sandy_key = ndb.Key('Account', 'sandy') sandy = sandy_key.get() 이렇게 하면 된다. 한꺼번에 여러 키를 조회 하고 싶다면 ndb.get_multi(key_list)를 이용하면 된다. sandy_key = ndb.Key('Account', 'sandy') sally_key = ndb.Key('Account', 'sally') list_of_keys = list() list_of_keys.append(sandy_key) list_of_keys.append(sally_key) list_of_entities = ndb.get_multi(list_of_keys) 이상. 더보기
Datastore - NDB API(Python) : 데이터 입력, update Datastore에서는 entity 단위로 데이터를 입력 삭제 한다. RDB에서 사용하는 row의 개념 으로 생각하면 된다. 각각의 entity는 고유한 key 값을 가지 며, property라고 하는 값들을 가진다. NDB API(python)를 이용하려면 django 에서처럼 model을 정의 하여 사용해야 한다. 사용방법은 from google.appengine.ext import ndb class Account(ndb.Model): username = ndb.StringProperty() userid = ndb.IntegerProperty() email = ndb.StringProperty() 와 같이 ndb.model을 상속하여 정의한다. 그러면 셈플 데이터를 입력해보자. sandy = Acco.. 더보기