[PYTHON/JINJA2] {# … #} 구문 : 주석 작성하기
■ {# … #} 구문을 사용해 주석을 작성하는 방법을 보여준다. ▶ 예제 코드 (HTML)
1 2 3 |
{# 주석을 기입할 때 사용되며 웹 페이지상에는 표시되지 않는다. #} |
■ {# … #} 구문을 사용해 주석을 작성하는 방법을 보여준다. ▶ 예제 코드 (HTML)
1 2 3 |
{# 주석을 기입할 때 사용되며 웹 페이지상에는 표시되지 않는다. #} |
■ python-multipart 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install python-multipart |
■ jinja2 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install jinja2 |
■ get 함수의 auth 인자를 사용해 다이제스트 인증 자격 증명을 제공하는 방법을 보여준다. (DigestAuth 객체 전달) ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() digestAuth = httpx.DigestAuth("user1", "1234") response = httpx.get("https://example.com", auth = digestAuth) printResponse("다이제스트 인증 자격 증명 제공하기", response) """ 다이제스트 인증 자격 증명 제공하기 response : <Response [200 OK]> response.url : https://example.com response.headers['content-type'] : text/html; charset=UTF-8 response.encoding : UTF-8 response.status_code : 200 """ |
■ get 함수의 auth 인자를 사용해 기본 인증 자격 증명을 제공하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() response = httpx.get("https://example.com", auth = ("user1", "1234")) printResponse("기본 인증 자격 증명 제공하기", response) """ 기본 인증 자격 증명 제공하기 response : <Response [200 OK]> response.url : https://example.com response.headers['content-type'] : text/html; charset=UTF-8 response.encoding : UTF-8 response.status_code : 200 """ |
■ Cookies 함수를 사용해 Cookies 객체를 HTTP 호출시 쿠키 값으로 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() cookies = httpx.Cookies() cookies.set("cookie_on_domain" , "hello, there!", domain = "httpbin.org") cookies.set("cookie_off_domain", "nope" , domain = "example.org") response = httpx.get('http://httpbin.org/cookies', cookies = cookies) printResponse("HTTP 호출시 Cookies 객체를 쿠키 값으로 전달하기", response) print(f" response.json() : {response.json()}") """ HTTP 호출시 Cookies 객체를 쿠키 값으로 전달하기 response : <Response [200 OK]> response.url : http://httpbin.org/cookies response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 response.json() : {'cookies': {'cookie_on_domain': 'hello, there!'}} """ |
■ get 함수의 cookies 인자를 사용해 HTTP 호출시 쿠키 값을 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() cookieDictionary = {"cookie1" : "value1"} response = httpx.get('https://httpbin.org/cookies', cookies = cookieDictionary) printResponse("HTTP 호출시 쿠키 값 전달하기", response) print(f" response.json() : {response.json()}") """ HTTP 호출시 쿠키 값 전달하기 response : <Response [200 OK]> response.url : https://httpbin.org/cookies response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 response.json() : {'cookies': {'cookie1': 'value1'}} """ |
■ Response 클래스의 cookies 변수를 사용해 HTTP 응답시 쿠키 값을 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() response = httpx.get('https://httpbin.org/cookies/set?chocolate=chip') printResponse("응답시 쿠키 값 구하기", response) print(f" response.cookies['chocolate'] : {response.cookies['chocolate']}") """ 응답시 쿠키 값 구하기 response : <Response [302 FOUND]> response.url : https://httpbin.org/cookies/set?chocolate=chip response.headers['content-type'] : text/html; charset=utf-8 response.encoding : utf-8 response.status_code : 302 response.cookies['chocolate'] : chip """ |
■ Response 클래스의 raise_for_status 메소드를 사용해 에러를 발생시키는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 36 37 |
from httpx import get, codes def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() response = get("https://httpbin.org/status/404") printResponse("404 에러 수신시 에러 발생시키기", response) if(response.status_code == codes.NOT_FOUND): response.raise_for_status() """ 404 에러 수신시 에러 발생시키기 response : <Response [404 NOT FOUND]> response.url : https://httpbin.org/status/404 response.headers['content-type'] : text/html; charset=utf-8 response.encoding : utf-8 response.status_code : 404 Traceback (most recent call last): File "/home/king/testproject/main2.py", line 18, in <module> response.raise_for_status() File "/home/king/testproject/env/lib/python3.10/site-packages/httpx/_models.py", line 1510, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '404 NOT FOUND' for url 'https://httpbin.org/status/404' For more information check: https://httpstatuses.com/404 """ |
■ Response 클래스의 status_code 변수 전체 값을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
from httpx import codes # codes 클래스는 IntEnum 클래스를 상속받았다. print(codes.OK) """ 200 """ # informational CONTINUE = 100, #Continue SWITCHING_PROTOCOLS = 101, #Switching Protocols PROCESSING = 102, #Processing EARLY_HINTS = 103, #Early Hints # succes# OK = 200, #OK CREATED = 201, #Created ACCEPTED = 202, #Accepted NON_AUTHORITATIVE_INFORMATION = 203, #Non-Authoritative Information NO_CONTENT = 204, #No Content RESET_CONTENT = 205, #Reset Content PARTIAL_CONTENT = 206, #Partial Content MULTI_STATUS = 207, #Multi-Status ALREADY_REPORTED = 208, #Already Reported IM_USED = 226, #IM Used # redirection MULTIPLE_CHOICES = 300, #Multiple Choices MOVED_PERMANENTLY = 301, #Moved Permanently FOUND = 302, #Found SEE_OTHER = 303, #See Other NOT_MODIFIED = 304, #Not Modified USE_PROXY = 305, #Use Proxy TEMPORARY_REDIRECT = 307, #Temporary Redirect PERMANENT_REDIRECT = 308, #Permanent Redirect # client error BAD_REQUEST = 400, #Bad Request UNAUTHORIZED = 401, #Unauthorized PAYMENT_REQUIRED = 402, #Payment Required FORBIDDEN = 403, #Forbidden NOT_FOUND = 404, #Not Found METHOD_NOT_ALLOWED = 405, #Method Not Allowed NOT_ACCEPTABLE = 406, #Not Acceptable PROXY_AUTHENTICATION_REQUIRED = 407, #Proxy Authentication Required REQUEST_TIMEOUT = 408, #Request Timeout CONFLICT = 409, #Conflict GONE = 410, #Gone LENGTH_REQUIRED = 411, #Length Required PRECONDITION_FAILED = 412, #Precondition Failed REQUEST_ENTITY_TOO_LARGE = 413, #Request Entity Too Large REQUEST_URI_TOO_LONG = 414, #Request-URI Too Long UNSUPPORTED_MEDIA_TYPE = 415, #Unsupported Media Type REQUESTED_RANGE_NOT_SATISFIABLE = 416, #Requested Range Not Satisfiable EXPECTATION_FAILED = 417, #Expectation Failed IM_A_TEAPOT = 418, #I'm a teapot MISDIRECTED_REQUEST = 421, #Misdirected Request UNPROCESSABLE_ENTITY = 422, #Unprocessable Entity LOCKED = 423, #Locked FAILED_DEPENDENCY = 424, #Failed Dependency TOO_EARLY = 425, #Too Early UPGRADE_REQUIRED = 426, #Upgrade Required PRECONDITION_REQUIRED = 428, #Precondition Required TOO_MANY_REQUESTS = 429, #Too Many Requests REQUEST_HEADER_FIELDS_TOO_LARGE = 431, #Request Header Fields Too Large UNAVAILABLE_FOR_LEGAL_REASONS = 451, #Unavailable For Legal Reasons # server errors INTERNAL_SERVER_ERROR = 500, #Internal Server Error NOT_IMPLEMENTED = 501, #Not Implemented BAD_GATEWAY = 502, #Bad Gateway SERVICE_UNAVAILABLE = 503, #Service Unavailable GATEWAY_TIMEOUT = 504, #Gateway Timeout HTTP_VERSION_NOT_SUPPORTED = 505, #HTTP Version Not Supported VARIANT_ALSO_NEGOTIATES = 506, #Variant Also Negotiates INSUFFICIENT_STORAGE = 507, #Insufficient Storage LOOP_DETECTED = 508, #Loop Detected NOT_EXTENDED = 510, #Not Extended NETWORK_AUTHENTICATION_REQUIRED = 511, #Network Authentication Required |
■ post 함수의 files 인자를 사용해 MULTIPART 방식으로 파일을 업로드하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() fileDictionary = {"upload-file" : open("./main.py", "rb")} response = httpx.post("https://httpbin.org/post", files = fileDictionary) printResponse("MULTIPART 인코딩 방식으로 파일 업로드", response) """ MULTIPART 인코딩 방식으로 파일 업로드 response : <Response [200 OK]> response.url : https://httpbin.org/post response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 """ |
■ post 함수의 json 인자를 사용해 JSON 데이터를 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() jsonDictionary = { "value1" : 123, "value2" : True, "value3" : ["a", "b", "c"] } response = httpx.post("https://httpbin.org/post", json = jsonDictionary) printResponse("JSON 데이터 전달", response) """ JSON 데이터 전달 response : <Response [200 OK]> response.url : https://httpbin.org/post response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 """ |
■ get 함수에서 headers 인자를 사용해 커스텀 헤더를 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() headerDictionary = { "user-agent" : "my-app/0.0.1", "accept" : "application/json", "content-type" : "text/html; charset=utf-8" } response = httpx.get("https://httpbin.org/headers", headers = headerDictionary) printResponse("사용자 정의 헤더 전달", response) import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() headerDictionary = { "user-agent" : "my-app/0.0.1", "accept" : "application/json", "content-type" : "text/html; charset=utf-8" } response = httpx.get("https://httpbin.org/headers", headers = headerDictionary) printResponse("사용자 정의 헤더 전달", response) """ 사용자 정의 헤더 전달 response : <Response [200 OK]> response.url : https://httpbin.org/headers response.headers['content-type'] : application/json response.encoding : utf_8 response.status_code : 200 """ |
■ get 함수의 params 인자에서 리스트 값을 쿼리 문자열로 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() parameterDictionary = {"key1" : "value1", "key2" : ["value2", "value3"]} response = httpx.get("https://httpbin.org/get", params = parameterDictionary) printResponse("쿼리 문자열에서 리스트 값 전달", response) """ 쿼리 문자열에서 리스트 값 전달 response : <Response [200 OK]> response.url : https://httpbin.org/get?key1=value1&key2=value2&key2=value3 response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 """ |
■ get 함수에서 params 인자를 사용해 쿼리 문자열 전달하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() parameterDictonary = {"key1" : "value1", "key2" : "value2"} response = httpx.get("https://httpbin.org/get", params = parameterDictonary) printResponse("쿼리 문자열 전달", response) """ 쿼리 문자열 전달 response : <Response [200 OK]> response.url : https://httpbin.org/get?key1=value1&key2=value2 response.headers['content-type'] : application/json response.encoding : ascii response.status_code : 200 """ |
■ get/put/delete/head/options 함수를 사용해 GET/PUT/DELETE/HEAD/OPTIONS 방식으로 HTTP 호출하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 |
import httpx def printResponse(title, response): print(title ) print(f" response : {response}" ) print(f" response.url : {response.url}" ) print(f" response.headers['content-type'] : {response.headers['content-type']}") print(f" response.encoding : {response.encoding}" ) print(f" response.status_code : {response.status_code}" ) #print(f" response.text : {response.text}" ) print() response = httpx.get("https://httpbin.org/get") printResponse("GET https://httpbin.org/get", response) response = httpx.put("https://httpbin.org/put", data = {"key" : "value"}) printResponse("PUT https://httpbin.org/put", response) response = httpx.delete("https://httpbin.org/delete") printResponse("DELETE https://httpbin.org/delete", response) response = httpx.head("https://httpbin.org/get") printResponse("HEAD https://httpbin.org/get", response) response = httpx.options("https://httpbin.org/get") printResponse("OPTIONS https://httpbin.org/get", response) |
▶ 실행 결과
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 32 33 34 35 36 |
GET https://httpbin.org/get response : <Response [200 OK]> response.url : https://httpbin.org/get response.status_code : 200 response.encoding : ascii response.headers['content-type'] : application/json PUT https://httpbin.org/put response : <Response [200 OK]> response.url : https://httpbin.org/put response.status_code : 200 response.encoding : ascii response.headers['content-type'] : application/json DELETE https://httpbin.org/delete response : <Response [200 OK]> response.url : https://httpbin.org/delete response.status_code : 200 response.encoding : ascii response.headers['content-type'] : application/json HEAD https://httpbin.org/get response : <Response [200 OK]> response.url : https://httpbin.org/get response.status_code : 200 response.encoding : None response.headers['content-type'] : application/json OPTIONS https://httpbin.org/get response : <Response [200 OK]> response.url : https://httpbin.org/get response.status_code : 200 response.encoding : utf-8 response.headers['content-type'] : text/html; charset=utf-8 |
■ 테스트 커버리지 보고서를 생성하는 방법을 보여준다. ▶ 실행 명령
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
(env) king@cosmos:~/testproject$ coverage run -m pytest ============================================================================================= test session starts ============================================================================================== platform linux -- Python 3.10.12, pytest-7.1.2, pluggy-1.0.0 rootdir: /home/king/testproject, configfile: pytest.ini plugins: asyncio-0.18.3, anyio-3.5.0 asyncio: mode=auto collected 9 items test/test_event.py ....... [ 77%] test/test_user.py .. [100%] =============================================================================================== warnings summary =============================================================================================== test/test_event.py::testCreateEvent test/test_event.py::testCreateEvent /home/king/testproject/env/lib/python3.10/site-packages/beanie/odm/settings/document.py:53: DeprecationWarning: Collection inner class is deprecated, use Settings instead warnings.warn( -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ======================================================================================== 9 passed, 2 warnings in 0.33s ========================================================================================= (env) king@cosmos:~/testproject$ coverage report Name Stmts Miss Cover ------------------------------------------------- application_setting.py 13 0 100% auth/auth_helper.py 9 1 89% auth/hash_helper.py 7 0 100% auth/jwt_helper.py 21 4 81% database/db_helper.py 10 0 100% database/document_helper.py 32 2 94% main.py 20 3 85% model/event.py 22 0 100% model/user.py 12 0 100% route/event.py 41 4 90% route/user.py 27 3 89% test/__init__.py 0 0 100% test/conftest.py 22 0 100% test/test_event.py 60 0 100% test/test_user.py 17 0 100% ------------------------------------------------- TOTAL 313 17 95% (env) king@cosmos:~/testproject$ coverage html Wrote HTML report to htmlcov/index.html |
■ httpx 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install coverage |
■ pytest 모듈을 사용해 FastAPI 애플리케이션에서 단위 테스트를 하는 방법을 보여준다. ※ 본 예제 코드는 [FastAPI 클래스 : JWT 인증 애플리케이션 만들기
■ pytest-asyncio 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install pytest-asyncio |
■ httpx 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 4 5 6 7 8 9 |
pip install httpx # HTTP/2 지원시 pip install httpx[http2] # Brotli Decoder 지원시 pip install httpx[brotli] |
■ @fixture 데코레이터를 사용하는 방법을 보여준다. ※ 픽스처는 재사용할 수 있는 함수로, 테스트 함수에 필요한 데이터를 반환하기 위해 정의된다. ※ 픽스처 데코레이터는
■ assert문을 사용해 단위 테스트하는 방법을 보여준다. ▶ math_helper.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def add(a : int, b : int) -> int: return a + b def subtract(a : int, b : int) -> int: return a - b def multiply(a : int, b : int) -> int: return a * b def divide(a : int, b : int) -> int: return a // b |
▶ test/math_helper.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from math_helper import add, subtract, multiply, divide def test_add() -> None: assert add(1, 1) == 2 def test_subtract() -> None: assert subtract(5, 2) == 3 def test_multiply() -> None: assert multiply(10, 10) == 100 def test_divide() -> None: assert divide(100, 25) == 4 |
※ 테스트 파일명은 파일명 앞에 "test_"를 붙여야 한다. ▶
■ Collection 클래스의 update_one 메소드에서 upsert 인자를 사용해 문서를 수정하거나 추가하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 36 |
from pymongo import MongoClient, ASCENDING databaseURL = "mongodb://localhost:27017/" mongoClient = MongoClient(databaseURL) testDatabase = mongoClient["testdb"] userCollection = testDatabase["user"] userCollection.delete_many({}) userList = [] for i in range(1, 6): user = { "email" : f"user{i}@sample.com", "password" : f"password{i}" } userList.append(user) userCollection.insert_many(userList) updateResult = userCollection.update_one( {"email" : "user6@sample.com"}, # 수정할 문서의 필터 {"$set" : {"password": "password6"}}, # 수정할 내용 upsert = True # 문서가 없는 경우 새 문서를 추가한다. ) print(updateResult) for user in userCollection.find(): print(user) |
▶ requirements.txt
1 2 3 4 |
dnspython==2.6.1 pymongo==4.7.2 |
■ Collection 클래스의 replace_one 메소드를 사용해 특정 조건을 만족하는 1개 문서를 대체하는 방법을 보여준다. ▶ 예제 코드 (PY)
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 32 33 34 35 |
from pymongo import MongoClient, ASCENDING databaseURL = "mongodb://localhost:27017/" mongoClient = MongoClient(databaseURL) testDatabase = mongoClient["testdb"] userCollection = testDatabase["user"] userCollection.delete_many({}) userList = [] for i in range(1, 6): user = { "email" : f"user{i}@sample.com", "password" : f"password{i}" } userList.append(user) userCollection.insert_many(userList) updateResult = userCollection.replace_one( {"password" : "password2"}, # 대체할 문서의 필터 {"email" : "user6@sample.com", "password": "password6"} # 새 문서 ) print(updateResult) for user in userCollection.find(): print(user) |
▶ requirements.txt
1 2 3 4 |
dnspython==2.6.1 pymongo==4.7.2 |