일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 코로나19
- 자연어처리
- 맥북
- 더현대서울 맛집
- Docker
- leetcode
- PYTHON
- ubuntu
- gs25
- github
- AI 경진대회
- 금융문자분석경진대회
- 캐치카페
- Kaggle
- 백준
- Baekjoon
- hackerrank
- dacon
- SW Expert Academy
- 데이콘
- Git
- 파이썬
- 프로그래머스 파이썬
- programmers
- 편스토랑
- ChatGPT
- Real or Not? NLP with Disaster Tweets
- 우분투
- 편스토랑 우승상품
- Today
- Total
솜씨좋은장씨
[MongoDB] Python과 Pymongo를 활용하여 데이터 추가하고 출력해보기! 본문
오늘은 python과 pymongo를 통해 mongoDB에 데이터를 추가하고 추가한 데이터를 출력해보고자 합니다.
1. 실행환경
- OS : Mac OS Catalina
- IDE : Pycharm
2. mongoDB 설치하기
먼저 python과 pymongo를 활용하여 DB에 접근하고 데이터를 추가하거나 출력하려면
mongoDB를 설치해주어야 합니다.
설치과정은 아래의 링크에서 확인할 수 있습니다.
2-1. OS X
2-2. Windows
3. pymongo 설치하기
pip install pymongo
먼저 위의 명령어로 pymongo를 설치해주었습니다.
4. mongoDB 서버 실행하기
mongod --dbpath=data/db
위의 명령어로 mongoDB 서버를 실행시켜 줍니다.
5. pycharm에서 mongoDB 연결하기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
설치한 pymongo에서 MongoClient를 import 해주고 이를 이용하여 mongoDB와 연결해줍니다.
잘 연결되었는지 확인해보기위해서 다음의 코드를 추가하여 실행하여봅니다.
print(my_client.list_database_names())
['admin', 'config', 'local']
잘 연결이 되었다면 위와 같은 결과를 얻을 수 있습니다.
현재 이 db에 존재하는 database의 이름을 확인할 수 있습니다.
mongo 명령어를 통해 열어서 사용하는 client에서
다음의 명령어를 사용하여 확인하는 것과 비슷한 결과를 얻을 수 있습니다.
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
이때 4번의 과정을 실행하지 않는다면 다음과 같은 오류가 발생됩니다.
Traceback (most recent call last):
File "AddDataToMongoDBFromCSV.py", line 109, in <module>
for x in my_doc:
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/cursor.py", line 1156, in next
if len(self.__data) or self._refresh():
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/cursor.py", line 1050, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1810, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1763, in __start_session
server_session = self._get_server_session()
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1796, in _get_server_session
return self._topology.get_server_session()
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/topology.py", line 485, in get_server_session
None)
File "/Users/donghyunjang/PycharmProjects/MovieFlaskAPI/venv/lib/python3.7/site-packages/pymongo/topology.py", line 209, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 61] Connection refused
6. 데이터 하나 추가하기
먼저 test db의 customers라는 collection에 이름과 주소를 가지는 Document 하나를 추가해보겠습니다.
from pymongo import MongoClient
import pandas as pd
my_client = MongoClient("mongodb://localhost:27017/")
# print(my_client.list_database_names())
mydb = my_client['test']
mycol = mydb['customers']
x = mycol.insert_one({"name":"SOMJANG", "address":"Dongjakgu, Seoul"})
print(x.inserted_id)
아까 연결해두었던 mongoDB에서 test db의 customers라는 collection에
{"name":"SOMJANG", "address":"Dongjackgu, Seoul"} Document하나를 추가해주었습니다.
이는 mongo client에서 다음의 명령어와 같은 결과를 얻을 수 있습니다.
use test
db.customers.insert({"name":"SOMJANG", "address":"Dongjakgu, Seoul"})
7. 데이터 여러개 한번에 추가하기
항상 데이터를 한번에 하나씩 추가해야하는 것인가 한다면
한번에 여러개를 추가할 수 있는 방법도 있습니다.
동일하게 test db의 customers 라는 collection에 세명의 이름, 주소를 가지고 있는
세 개의 Document를 한번에 추가해보도록 하겠습니다.
from pymongo import MongoClient
import pandas as pd
my_client = MongoClient("mongodb://localhost:27017/")
# print(my_client.list_database_names())
mydb = my_client['test']
mycol = mydb['customers']
my_dict = [{"name":"PUTTY", "address":"SSH World, Network"},
{"name":"donghyunjang", "address":"Seoul, Korea"},
{"name":"Avengers", "address":"Avengers Team Building, USA"}]
x = mycol.insert_many(my_dict)
print(x.inserted_ids)
추가할 데이터를 list형태로 로 만들고 이를 insert_many를 활용하여 한번에 추가할 수 있습니다.
이는 mongo client에서 다음의 명령어와 같은 결과를 얻을 수 있습니다.
use test
db.customers.insert([{"name":"PUTTY", "address":"SSH World, Network"},
{"name":"donghyunjang", "address":"Seoul, Korea"},
{"name":"Avengers", "address":"Avengers Team Building, USA"}])
8. 추가한 데이터 출력해보기
이렇게 추가한 데이터가 잘 추가가 되어있는지 출력해보고자 합니다.
출력해보는 코드는 다음과 같습니다.
8-1. 하나만 출력해보기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
x = mycol.find_one()
print(x)
다음과 같이 하나만 출력이 되는 것을 볼 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e80876d143a7c2183ac3d93'), 'name': 'SOMJANG', 'address': 'Dongjakgu, Seoul'}
8-2. 여러개 출력해보기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
list = mycol.find()
for x in list:
print(x)
다음과 같이 아까 추가했던 모든 Document가 출력이 되는 것을 볼 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e80876d143a7c2183ac3d93'), 'name': 'SOMJANG', 'address': 'Dongjakgu, Seoul'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f835'), 'name': 'PUTTY', 'address': 'SSH World, Network'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f836'), 'name': 'donghyunjang', 'address': 'Seoul, Korea'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f837'), 'name': 'Avengers', 'address': 'Avengers Team Building, USA'}
8-3. 이름 기준 오름차순으로 출력해보기
from pymongo import MongoClient
import pandas as pd
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
my_doc = mycol.find().sort("name")
for x in my_doc:
print(x)
다음과 같이 이름을 기준으로 오름차순으로 정렬되어 출력되는 것을 볼 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e8087fb2c7b4e51af20f837'), 'name': 'Avengers', 'address': 'Avengers Team Building, USA'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f835'), 'name': 'PUTTY', 'address': 'SSH World, Network'}
{'_id': ObjectId('5e80876d143a7c2183ac3d93'), 'name': 'SOMJANG', 'address': 'Dongjakgu, Seoul'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f836'), 'name': 'donghyunjang', 'address': 'Seoul, Korea'}
8-4. 이름 기준 내림차순으로 출력해보기
from pymongo import MongoClient
import pandas as pd
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
my_doc = mycol.find().sort("name", -1)
for x in my_doc:
print(x)
다음과 같이 이름을 기준으로 내림차순으로 정렬되어 출력되는 것을 볼 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e8087fb2c7b4e51af20f836'), 'name': 'donghyunjang', 'address': 'Seoul, Korea'}
{'_id': ObjectId('5e80876d143a7c2183ac3d93'), 'name': 'SOMJANG', 'address': 'Dongjakgu, Seoul'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f835'), 'name': 'PUTTY', 'address': 'SSH World, Network'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f837'), 'name': 'Avengers', 'address': 'Avengers Team Building, USA'}
8-5. 원하는 쿼리를 통해 결과를 필터링하고 출력해보기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
my_query = {"address":"Seoul, Korea"}
my_doc = mycol.find(my_query)
for x in my_doc:
print(x)
주소가 Seoul, Korea 인 Document만 필터링하여 출력해보았습니다.
다음과 같이 Seoul, Korea가 주소인 문서만 선택되어 출력이 된 것을 볼 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e8087fb2c7b4e51af20f836'), 'name': 'donghyunjang', 'address': 'Seoul, Korea'}
만약 쿼리에 넣은 주소가 문서들에 존재하지 않는다면
다음과 같이 결과에는 아무것도 출력되지 않는 것을 확인할 수 있습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
8-6. 비교연산 쿼리를 통해 필터링하고 출력해보기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
my_query = {"name":{"$gt":"C"}}
my_doc = mycol.find(my_query)
for x in my_doc:
print(x)
쿼리안에 이름이 " C " 보다 사전 순서 기준으로 더 뒤에있는 이름을 가지고 있는 문서들만 찾아 출력해보았습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e80876d143a7c2183ac3d93'), 'name': 'SOMJANG', 'address': 'Dongjakgu, Seoul'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f835'), 'name': 'PUTTY', 'address': 'SSH World, Network'}
{'_id': ObjectId('5e8087fb2c7b4e51af20f836'), 'name': 'donghyunjang', 'address': 'Seoul, Korea'}
8-7. 정규식 쿼리를 통해 필터링하고 출력해보기
from pymongo import MongoClient
my_client = MongoClient("mongodb://localhost:27017/")
mydb = my_client['test']
mycol = mydb['customers']
my_query = {"name":{"$regex":"^A"}}
my_doc = mycol.find(my_query)
for x in my_doc:
print(x)
쿼리안에 이름이 A로 시작하는 문서만 찾아 출력해보도록 해보았습니다.
(venv) (base) DongHyunui-MacBook-Pro:MovieFlaskAPI donghyunjang$ python AddDataToMongoDBFromCSV.py
{'_id': ObjectId('5e8087fb2c7b4e51af20f837'), 'name': 'Avengers', 'address': 'Avengers Team Building, USA'}
'Programming > NoSQL' 카테고리의 다른 글
[MongoDB] shutting down with code:100 원인 및 해결 방법 (0) | 2021.08.21 |
---|---|
[MongoDB x Flask] TypeError: Object of type Cursor is not JSON serializable 해결방법 (0) | 2020.05.01 |
[MAC OSX]MAC에 MongoDB설치하기! (7) | 2019.09.19 |