본문 바로가기

Dev./Google App Engine

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 = Account() sandy.username = 'Sandy' sandy.userid = 123 sandy.email = 'sandy@gmail.co.kr' sandy.key = ndb.Key('Account', 'Sandy') # 그 외 방법들 # sandy = Account(username="Sandy", userid=123, email="sandy@gmail.co.kr", key = ndb.Key('Account', 'Sandy')) # 또는 # sandy = Account() # sandy.populate(username="Sandy", userid=123, email="sandy@gmail.co.kr", key = ndb.Key('Account', 'Sandy')) sandy_key = sandy.put()

와 같이 entity를 만들고 put() 명령어를 실행함으로서 데이터를 입력 할 수 있다. put 명령에 대한 결과로 ndb.Key 타입을 반환 한다.



Key를 정의하면서 부모키(parent또는 ancestor)를 정의 할 수 있다. 이를 통해 "Datastore에서 kind(table)는 부모 자식 관계로 연결 할 수 있다." 라는 사실을 알 수 있다.

부모키 설정 방법

k1 = ndb.Key('Account', 'Sandy', 'Message', 'greetings', 'Revision', '2')
k2 = ndb.Key(Revision, '2', parent=ndb.Key('Account', 'Sandy', 'Message', 'greetings'))
k3 = ndb.Key(Revision, '2', parent=ndb.Key(Account, 'Sandy', Message, 'greetings'))




entity를 update할때도 put() 명령어를 사용한다. sandy entity가 입력된 상태에서 아래 코드를 실행한다면

    sandy.email = 'sandy.gmail.co.kr'
    sandy.put()

email의 property가 sandy@gmail.com으로 변경 된다.



list를 이용하여 여러건을 동시에 입력 할 수도 있다.

#    entity를 생성하고    
    sandy = Account()
    sandy.populate(username="Sandy", userid=123, email="sandy@gmail.com", key = ndb.Key('Account', 'Sandy'))
    sally = Account()
    sally.populate(username='Sally', userid=456, email='sally@gmail.com', key=ndb.Key('Account', 'Sally1'))

#    list에 담아서
    list_of_entities = list()
    list_of_entities.append(sandy)
    list_of_entities.append(sally)

#    한번에 입력한다.
    list_of_keys  = ndb.put_multi(list_of_entities)

와 같이 ndb.put_multi 명령어를 사용하고, 결과값으로 ndb.Key 가 담긴 list를 반환한다.




입력하고 나면 AppEngine console에서 확인 할 수 있다.


Sandy와 Sally가 각각 등록 되어 있다.


Sally를 클릭해보면

Kind (RDB 의 Table 개념인가??)는 Account

Key Name 은 Sally1

그외 입력한 값 들이 제대로 입력되어 있는것을 볼 수 있다.



반응형