
앞서 dictionary 에 담아 CRUD를 구현한 내용을 포스팅하였습니다.
클래스를 통한 입출력
Cloud firesotre는 클래스로 문서작성을 지원하므로 아래 예제에서는 클래스를 통한 입출력 예제를 테스트해 보겠습니다.
[이전 포스팅] : Python으로 Firestore Database 다루기 (설정 / CRUD)
[예제 원문] : Firesore 데이터 추가 및 관리
city.py
class City(object):
def __init__(self, name, state, country, capital=False, population=0,
regions=[]):
self.name = name
self.state = state
self.country = country
self.capital = capital
self.population = population
self.regions = regions
@staticmethod
def from_dict(source):
city = City(source[u'name'], source[u'state'], source[u'country'])
if u'capital' in source:
city.capital = source['capital']
if u'population' in source:
city.population = source['population']
if u'regions' in source:
city.regions = source[u'regions']
return city
def to_dict(self):
dest = {u'name': self.name,
u'state': self.state,
u'country': self.country
}
if self.capital:
dest[u'capital'] = self.capital
if self.population:
dest[u'population'] = self.population
if self.regions:
dest[u'regions'] = self.regions
return dest
def __repr__(self):
return(
f'City( \
name={self.name}, \
country={self.country}, \
capital={self.capital}, \
population={self.population}, \
capital={self.capital}, \
regions={self.regions}\
)'
)
city_set.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from city import City
cred = credentials.Certificate("./first-firestore.json")
firebase_admin.initialize_app(cred)
db = firestore.client()
cities_ref = db.collection(u'cities')
cities_ref.document(u'BJ').set(
City(u'Beijing', None, u'China', True, 21500000, [u'hebei']).to_dict())
cities_ref.document(u'SF').set(
City(u'San Francisco', u'CA', u'USA', False, 860000,
[u'west_coast', u'norcal']).to_dict())
cities_ref.document(u'LA').set(
City(u'Los Angeles', u'CA', u'USA', False, 3900000,
[u'west_coast', u'socal']).to_dict())
cities_ref.document(u'DC').set(
City(u'Washington D.C.', None, u'USA', True, 680000,
[u'east_coast']).to_dict())
cities_ref.document(u'TOK').set(
City(u'Tokyo', None, u'Japan', True, 9000000,
[u'kanto', u'honshu']).to_dict())
실행 결과

city_get.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from city import City
cred = credentials.Certificate("./first-firestore.json")
firebase_admin.initialize_app(cred)
db = firestore.client()
doc_ref = db.collection(u'cities').document(u'SF')
doc = doc_ref.get()
if doc.exists:
print(f'Document data: {doc.to_dict()}')
else:
print(u'No such document!')
city = City.from_dict(doc.to_dict())
print(city)
실행결과
$ python3 city_get.py
Document data: {'country': 'USA', 'population': 860000, 'regions': ['west_coast', 'norcal'],
'state': 'CA', 'name': 'San Francisco'}
City(name=San Francisco, country=USA, capital=False,
population=860000, capital=False, regions=['west_coast', 'norcal']
)
쿼리, 정렬, 제한
입력된 데이터를 가져오기 위해 다양한 조건 입력이 가능합니다.
RDBMS 처럼 WHERE 절을 이용해 조건을 추가하고, direction 구문을 이용해 정렬, limit 절을 이용해 데이터 수신 제한을 걸 수 있습니다.
[예제 원문] Firestore 데이터 읽기
city_where.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from city import City
cred = credentials.Certificate("./first-firestore.json")
firebase_admin.initialize_app(cred)
db = firestore.client()
docs = db.collection(u'cities').where(u'capital', u'==', True).stream()
print("capital is True -----")
for doc in docs:
print(f'{doc.id} => {doc.to_dict()}')
print("order by name limit -2 -----")
cities_ref = db.collection(u'cities')
query = cities_ref.order_by("name").limit_to_last(2)
results = query.get()
for doc in results:
print(f'{doc.id} => {doc.to_dict()}')
print("order by name desc limit 3 -----")
query = cities_ref.order_by(
u'name', direction=firestore.Query.DESCENDING).limit(3)
results = query.stream()
for doc in results:
print(f'{doc.id} => {doc.to_dict()}')
실행 결과
capital is True -----
BJ => {'capital': True, 'name': 'Beijing', 'population': 21500000, 'regions': ['hebei'], 'state': None, 'country': 'China'}
DC => {'capital': True, 'name': 'Washington D.C.', 'population': 680000, 'regions': ['east_coast'], 'state': None, 'country': 'USA'}
TOK => {'capital': True, 'country': 'Japan', 'state': None, 'regions': ['kanto', 'honshu'], 'population': 9000000, 'name': 'Tokyo'}
order by name limit -2 -----
LA => {'country': 'USA', 'state': 'CA', 'regions': ['west_coast', 'socal'], 'population': 3900000, 'name': 'Los Angeles'}
BJ => {'capital': True, 'name': 'Beijing', 'population': 21500000, 'regions': ['hebei'], 'state': None, 'country': 'China'}
order by name desc limit 3 -----
DC => {'capital': True, 'country': 'USA', 'population': 680000, 'regions': ['east_coast'], 'state': None, 'name': 'Washington D.C.'}
TOK => {'capital': True, 'name': 'Tokyo', 'population': 9000000, 'regions': ['kanto', 'honshu'], 'state': None, 'country': 'Japan'}
SF => {'name': 'San Francisco', 'population': 860000, 'regions': ['west_coast', 'norcal'], 'state': 'CA', 'country': 'USA'}
'Python' 카테고리의 다른 글
pynecone 페이지 추가 (0) | 2023.01.27 |
---|---|
pynecone 설치 및 프로젝트 생성 (0) | 2023.01.27 |
Python으로 Firestore Database 다루기 (설정 / CRUD) (0) | 2023.01.25 |
Python dataclass 사용하기 (0) | 2022.12.29 |
셀레니움 크롬드라이버로 local storage제어하기 (0) | 2022.11.28 |