SOCO

Pymongo 본문

데이터베이스/NOSQL

Pymongo

ssooda 2021. 7. 8. 17:34

파이썬으로 몽고db제어하기

 

1. pymongo 라이브러리를 설치해야함

터미널에서

pip3 install pymongo

=> Successfully installed pymongo-3.11.4

 

2. pymongo라이브러리 import :  import pymongo

 

3. 로컬pc에 있는 Monogodb에 접속하기

처음에 pymongo를 설치하고 Import한 다음 mongodb서버에 접속해야함 : MongoClinet() 

import pymongo
connection = pymongo.MongoClient() #주소를 입력하지 않는 경우 로컬pc에 연결됨(default : 27017)

cf. 로보 3T를 사용하는 경우 몽고db가 있는 주소를 적어줬음 

 

4. database, collection를 생성 또는 선택할 수 있게 하는 기능

잊지말자 : database > collection > document( JSON ; key : value)

 

1)원하는 데이터베이스 생성 또는 선택

#방법1
db =connection.test #database를 의미하는 변수명 = mongodb와 연결한 변수명.database_name

#방법2
db = connection["test"]

#Robo 3T에서 use database_name 과 동일 => 이 경우 db는 해당 database를 의미하게 됨

 

2)원하는 collection 생성 또는 선택

#방법1
knowledge_it = knowledge.it #collection을 의미하는 변수명 =database변수명.collection_name

#방법2
knowledge_it = knowledge["it"]

 

데이터를 넣기 전까는 실제로 저장공간이 만들어지지는 않음

데이터를 넣으면 robo 3T에서도 확인할 수 있음

 

 

 5. 해당 database의 collection에 CRUD명령을 어떻게 할 수 있는지 

1)Create  

(1) mongodb shell명령어(robo 3T에서 사용)

: insertOne({key:value, key:value, key:value}) / insertMany()

#insertOne()
db.collection_name.insertOne( //database_name.collection_name.insertOne
	{key : "value",
    	 key : "value",
   	 key : "value"}
)

#inserMany
db.collection_name.insertMany(
	[
    	{key:"value", key:"value"},
        {key:"value", key:"value"},
        {key:"value", key:"value"}        
    ]
)

 

(2)pymongo 라이브러리에서 제공하는 함수

: insert_one({key:value, key:value, key:value) / insert_many()

#1단계 : 라이브러리 import
import pymongo 
#2단계 : pymongo라이브러리에서 MongoClient함수를 통해 로컬pc와 연결
connection = pymongo.MongoClient()
#3단계 : db_name이라는 database를 만듦 ->이제 db_name은 db로 사용할 수 있음(변수설정)
db = connection.db_name 
#4단계 : collection_name이라는 collection을 만듦
collection = db.collection_name
#5단계 : create
collection.insert_one({"key":"value", "key":"value", "key":"value"})

collection.insert_many(
	[
    	{"key":"value", "key":"value"},
        {"key":"value", "key":"value"},
        {"key":"value", "key":"value"}
    ]
)

#풀어쓰면 다음과 같다
#pymongo.MongoClient().db_name.collection_name.insert_one()

**주의 : key값도 ""붙여야함. ""안 붙이면 변수로 인식해서 에러날 수 있음 

 

참고 : RDBMS의 primary_key에 해당하는 _id의 값을 알고 싶은 경우 : document마다 부여됨

document = collection.insert_one({"key":"value"})

print(document.inserted_id)

참고 : collection에 있는 document 개수를 알고 싶은 경우

collection.estimated_document_count()

json포맷 = python에서 딕셔너리임

insert_many의 경우 여러개의 딕셔너리로 구성된 리스트(JSON)를 통해 넣는 것이다!

 

 

2) Read

(1)mongodb shell명령어(robo 3T에서 사용)

: findOne() -> document 1개 /  find() ->document 여러개

 

(2)pymongo 라이브러리에서 제공하는 함수 

: find_one()  -> 1개 / find({조건}, {보여줄 field/key}) -> 여러개 (결과가 리스트변수로 넘어옴)

document = collection.find() #여러개를 찾는 경우 리스트변수로 넘어옴
for doc in document :
	print(doc)
    
document = collection.find({"key" : "value"}) # 조건에 맞는 doucument를 print
for doc in document :
	print(doc)

 

참고 : collection에 있는 "조건에 맞는" document 개수를 알고 싶은 경우

collection.count_documents({"key":"value"})

 

참고 : collection에 있는 "조건에 맞는" document 개수를 알고 싶은 경우

for post in collection.find().sort("key") : #collection에 있는 document를 찾아서(리스트) key값의 value를 기준으로 정렬한 다음 print
	print(post)


3)Update

 

(1)mongodb shell명령어(robo 3T에서 사용) 

: updateOne() -> document 1개 /  updateMany() ->document 여러개

db.collection_name.updateMany(
	{key : "value"},		# 조건
    {$set : {key : "value"} # 어떤 field의 내용을 어떻게 바꿀지
)

 

(2)pymongo 라이브러리에서 제공하는 함수 

: update_one()  -> 1개의 다큐먼트  / update_many() -> 여러개의 다큐먼트

collection.update_one({조건}, {업데이트 할 내용})
collection.update_one(
	{"key":"value"}, 				# document찾는 조건
    {"$set" : { "key" : "value"}}	# 해당 document의 어떤 field(key)를 어떻게 바꿀지
)

본래의 다큐멘트에 있는 특정 key에 대한 값을 수정하는 것도 가능하고

해당 다큐멘트에 추가적인 key : value를 넣는 것도 가능함

 

*참고 : create는 document자체를 만드는 것이고 update는 document안에 있는 data(key : value)를 바꾸는 것이다

 

 

4) Delete

(1)mongodb shell명령어(robo 3T에서 사용) 

: deleteOne() -> document 1개 /  deleteMany() ->document 여러개

 

(2)pymongo 라이브러리에서 제공하는 함수

: delete_one()  -> 1개의 다큐먼트  / delete_many() -> 여러개의 다큐먼트

collection.delete_many(
	{"key" : "value"} #조건
)

 

참고 : 비교문법

#MongoDB shell
{ key : {$gte : 6} } 

#Python
{ "key" : {"$gte" : 6} }

 

강의 : NoSQL DB (몽고DB/mongodb) 기본부터 파이썬/데이터분석 활용까지!