본문 바로가기

Dev./Google App Engine

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명만 정의하고 모든 속성들을 동적으로 생성해서 사용할 수 도 있지만, 이렇게 하면 검색시 어려움이 발생한다.

어려움 이라기보다는 귀찮음....



따라서 필요한 경우에만 동적으로 사용하는것이 좋겠다.

class FlexEmployee(ndb.Expando):
    name = ndb.StringProperty()
    age = ndb.IntegerProperty()

e = FlexEmployee(name='Sandy', location='SF')

위와 같은 식으로 일부 정의하고 필요하면 동적으로 사용하는게 좋겠다.

반응형