티스토리 뷰
로컬 주피터 노트북에서 데이터베이스(DB)에 접속하기
어떻게 데이터를 생성하고 삭제하는지 이해해야 한다.
개인 pc에서 쥬피터 노트북을 실행한다.
pc에서 포트가 쥬피터 8888,
ec2에서 포트가 쥬피터 8888, mongodb : 27017이다.
어차피 ec2에서 쥬피터를 띄워서 mongodb에 접속하나, pc에서 mongodb에 접속하나 똑같다.
이는 코랩에서 동작을 시켜도 똑같다.
pymongo 사용
!pip install pymongo
import pymongo
import pandas as pd
json 포맷의 딕셔너리 데이터만 가지고도 데이터를 넣고 빼고도 할 수 있다.
간단한 시스템 만들 때 사용한다.
1. connect server
uri = 'mongodb://<user>:<password>@<public ip>:<port>/?authSource=admin'
client =pymongo.MongoClient(uri)
client
그 후 목록을 확인한다.
list(client.list_databases())
name:admin 이런 형식으로 잘 뜨면 접속이 잘 된 것이다.
df = pd.DataFrame({
'name': list('ABCD'),
'age': [23, 25, 37, 46],
'addr': list('SPIS'),
})
df
이런 식으로 데이터를 만들 수도 있다.
2. CRUD
Server에서 DBS라고 하는 데이터 베이스 프로그램이 돌아간다. 따지자면 엑셀
엑셀 : DB
엑셀 파일 : DB - DB1, DB2 등
Collection은 파일 안의 시트의 개념이다. 행과 열의 개념으로 이루어져 있다.
Document는 Collection의 행이다.
key:value는 Collection의 열이다.
그래서 Server>DBS>DB>Collection>Document>Document=key:value이다.
데이터베이스에서 데이터를 가져올 때는 데이터 베이스에 접속해서, Collection에서
client.mongo.user
client = DBS
.mongo = DB 이름
.user = collection의 이름이다.
Create
json_data = df.to_dict('records')
json_data
데이터를 저장할 때는 json 포맷을 쓴다.
위 코드로 리스트 안에 딕셔너리가 있는 포맷으로 바뀐다.
#DBS(client) > DB(mongo) > Collection(users)
result = client.mongo.users.insert_many(json_data)
client는 접속 정보이고, 위에 DB라는 파일을 만들어서, users라는 collection에 접속한다.
insert_many는 한꺼번에 여러개를 만드는 것이다.
result가 objectid로 들어가 있으면 잘 저장된 것이다.
Read
collection = client.mongo.users
documents = collection.find({})
data = list(documents)
len(data) , data[0
(5,
{'_id': ObjectId(,
'name': 'A',
'age': 25,
'addr': 'S'})
결과는 cursor 타입으로 나오므로, list로 출력한다.
다음과 같은 형식으로 나오면 바로 된 것이다.
일부분 읽어오기
모든 데이터를 항상 읽어오는 게 아니므로,
collection = client.mongo.users
documents = collection.find({'age': {'$lt': 30}}) #lt는 30세 미만, lte는 30세 포함으로 검색
data = list(documents)
pd.DataFrame(data)
_id name age addr
0 6641c4c1fe1dee4da6f0db38 A 25 S
Update
collection.update_many({'age': {'$lt': 30}}, {'$set': {'age': 20, 'addr':'S'}})
#첫번째 argument에서는 30세 미만, 두번쨰 argument에서는 해당 데이터의 age를 20으로 바꿔준다.
앞뒤로 수정된 수정본을 보면 바뀌었음을 알 수 있다.
update는 하나, update_many는 여러개이다.
Delete
collection = client.mongo.users
collection.delete_many({'addr': 'S'})
이러면 addr이 s면 사라진다.
인공지능을 사용할 때는 DB가 필요하다.
pymongo는 WAS와 DB를 연결해준다.
이제 WAS 개발, localhost와 인터넷망을 연결해주는 nginx만 배우면 된다.
서버 안에 html 파일만 있으면 WAS에서 연결할 수 있다. 이게 deploy이다.
여기까지 하면 화면 만들고, 서버 설정해서 nginx로 서비스하면 서비스 하나 만들 수 있다.
+a가 있다면 SSL = https 설정, domain 설정
route53 서비스로 산다.
그러면 완벽한 웹서비스 구성이다.
WAS에 model을 탑재 해서 WAS에서 모델이 동작이 되서 text를 보내면 알려주는 동작.
클라이언트 프로그램을 slack을 써서 해당 메세지를 채팅 결과로 보내주는 것도 해볼 것이다.