본문 바로가기

Python11

Python - smtplib 기본 라이브러리를 이용한 text/html 메일 보내기 대부분 프로그래밍에서는 메일 전달과 관련된 기본 라이브러리 및 예제 코드를 제공하고 있다. 오늘은 Python 부분에 대해서 메일 전송 방안에 대해 정리해 보고자 한다. 여기에서는 기본 라이브러리를 활용한 방안에 대해서 정리해 보도록 하겠다. MailSender 함수 만들기 메일에 내용이나 본문이 변경될 수 있기 때문에 아래와 같이 함수를 선언하여 사용하는 것을 추천한다. 아래 코드에서 유심있게 봐야하는 부분은 보내야 하는 대상 즉 To가 여러명일 경우, sendmail 에서의 To 데이터와 Message["To"]에 들어가는 데이터 형식이 다르다는 것이다. smtplib 의 sendmail 에서는 []를 이용한 리스트 형태로 들어가야 한다. 하지만 message["To"] 에서는 string으로 들어가.. 2021. 9. 6.
Python - snake_case, camel_case, upper_case naming style 이란 코드 네이밍은 서로 몇가지 규칙을 개발자들 사이에서 코드 가독성과 공유시 보다 이해가 쉽도록 하는데 있다. 필수도 지킬 필요는 없지만, 동일한 규칙을 사용하게 되면, 서로 다른 개발자가 개발한 코드라도 이해도가 높아지고 코드의 완성도가 높아지기 때문에 되도록이면 규칙을 정해서 사용하는 것이 좋다. 오늘은 Python 의 Linting highlights syntactical and stylistic problems와 Code Quality 로 활용할 수 있는 Linting 기능을 이용하면 Snake_case Name 경고를 볼 수 있는데, Python에서 추천하는 Code Naming인 Snake Case와 그외 많이 사용하는 Camel Case, 그리고 Upper Case에 대해서 정리해 보겠다. Sn.. 2021. 8. 24.
Python - Boto3 lib paginator 통한 S3 대량 데이터 가져오기 Boto3 라이브러리는 Python에서 AWS 리소스를 사용하기 위해 가장 많이 사용되는 라이브러리로 여기에서 최근 알게된 팁을 하나 정리해 본다. 아마 가장 많이 사용하는 기본적인 코드 방식은 다음과 같을 것이다. import boto3 client = boto3.client('s3') my_bucket = s3.Bucket('bucket_name') for file in my_bucket.objects.all(): print(file.key) 위 코드를 통해 기본적으로 쿼리를 진행하면 한번에 최대 1000개의 데이터만 가져올 수 있다. 하지만 기업에서 사용하는 데이터를 보통 더 많은 데이터를 보관하고 있기 때문에 1000개의 제한을 해결할 수 있는 방식을 추가로 제공하는데, ListObjectV2를 .. 2021. 8. 19.
VSCode - Pylint로 코드 퀄리티 높이기 https://code.visualstudio.com/docs/python/linting Linting Python in Visual Studio Code Linting Python in Visual Studio Code code.visualstudio.com 이전 글에서 에러 해결과 함께 정리해보았는데, 여기서 조금 Lint 부분만 정리해 본다. 우선 python 용 Linting 기능을 담당하는 pylint를 설치하자. pip3 install pylint 이후에는 Language Server를 Jedi로 설정할 것을 추천한다. 아래 설정 화면은 VSCode의 플러그인 메뉴에서 Python의 톱니 바퀴를 선택하여 환경설정을 선택할 수 있다. 그리고 아래와 같이 Jedi를 선택하자. 이렇게 구성한 이후 .. 2021. 8. 11.
VSCode Error - Sorry, something went wrong activating IntelliCode support for Python. Please check the "Python" and "VS IntelliCode" output windows for details. 한동안 Python을 VS Code로 쓰면서 크게 의식하고 있지 않았는데, 오늘은 왠지 모르게 위 오류가 정말 거슬리는 하루 였다. 그래서 한번 위 오류를 해결한 내용을 정리해 본다. 위 오류가 발생하는 원인은 크게 2가지로 고민해 볼 수 있다. 첫째 - Visual Studio IntelliCode 플러그인의 문제 둘째 - Visual Studio Code의 Linting 의 문제 아마 첫번째 플러그인의 문제라면 버전을 바꿔서 설치해보는것이 가장 기본적인 액션 플랜이다. 이후에는 settings.json의 Python 설정을 찾아서 변경해보는 것이 좋다. 위 방식으로도 해결이 되지 않는다면, 두번째 문제에 대한 해결 방안인 Linting을 다시 설치해 보는것이 좋다. 2021. 7. 26.
Python - string 문자열 원하는 구분자 기준으로 나누기 오늘은 최근에 특정 문자열 갯수를 넘어가는 글에 대해서 조금 더 이쁘게 잘라 낼 수 있을까에 대한 고민하던 부분중에 개발을 진행한 부분에 대한 내용이다. 고민한 내용은 간단하다. \n 기준으로 문자열을 자르고 싶은데, \n을 기준으로 자르자니 너무 많이 문자열이 잘라지므로 이를 가장 알맞은 길이를 대입하여 자르고 싶었다. 그래서 생각한 규칙은 다음과 같다. 특정 길이 기반으로 문자열을 자른다. 만약 원하는 구분자가 해당 특정 길이 내에 있다면, 특정 길이를 안에 있는 구분자를 이용하여 자른다. 원하는 구분자가 특정 길이에 여러개 있다면 최대한의 크기를 유지 할 수 있었으면 한다. 원하는 구분자가 없는 경우에는 최대 크기로 자른다. 조건은 위 4가지 인데 실제 코드를 작성해 보니 생각보다 고려해야 할 포인.. 2021. 6. 28.
Python - Http Retry 및 while 을 통한 반복문 요즘 REST API 참으로 많이 사용된다. 그런데 HTTP 호출을 사용하다보면, 받아주는 서버가 정상적으로 회신을 주지 않는 경우가 있다. 이러한 경우 어떻게 조치하는게 좋을지 Python에서 제공하는 모듈과 일반적인 방법에 대해서 정리해 본다. 1. while 문 사용 가장 일반적으로 사용되는 방식은 while 문을 이용한 특정 조건이 완료될 때 까지 반복 하는 방법이다. while 문 내에 아래와 같이 1이 나올 때까지 실행하는 방식으로 조건이 완료될 때까지 실행할 수 있다. import random while True: number = random.randint(0,1000) if number == 1: print('Bingo') break else: print(number) 이를 조금 웹 코드에.. 2021. 6. 16.
Python - subprocess, Popen, call차이 그리고 WorkDirectory 변경 Python에서 실행중 추가로 프로그램을 실행해야 하는 경우가 발생할 경우 subprocess 모듈을 이용해서 사용할 수 있다. 아마 이모듈을 사용할 때 가장 많은 찾아보게 되는 부분이 Popen과 Call의 차이 그리고 WorkDirectory 변경일 것 같다. 그럼 핵심만 간단히 정리해 보자. Popen 과 call의 차이점 Popen과 call의 가장 큰 차이점은 바로 결과를 기다릴 수 있는 구조인가 이다. 실제로 call은 Popen을 감싼 구조라고 할 수 있다. 즉 Popen으로 실행한 프로그램을 실행을 기다렸다가, 실행이 완료되었을 때 결과를 받을 수 있는 것이 call인것이다. 따라서 실행 결과를 기다릴 필요가 없다면, Popen을 사용하고, 실행 결과를 대기하였다가 확인해야 하는 경우 ca.. 2021. 5. 24.
Python - sqlalchemy bigint 사용한 id 값 고려 Python 의 기본 ORM 을 사용한다면, id 필드를 통한 unique 값 생성이 기본이다. 기본값은 INT인데, INT로 생성할 경우 최대 생성 가능한 컬럼이 2,147,483,647 까지 가능하다. 만약 이값을 넘어간다면, 추후 BIGINT로 변경하는 것을 고려해야 한다. 따라서 되도록 초기 구성시 INT보다 큰 값을 제공하는 BIGINT를 이용하기를 추천한다. https://docs.sqlalchemy.org/en/14/core/type_basics.html Column and Data Types — SQLAlchemy 1.4 Documentation A type for fixed precision numbers, such as NUMERIC or DECIMAL. This type returns.. 2021. 5. 4.
Django - MySQL/MariaDB 연결하기 대부분의 서비스용도로 사용하다면, 기본적으로 제공하는 파일 기반의 Database인 SQLlite 보다는 MySQL, 혹은 MariaDB를 통해 Database를 사용하는 것이 확장성에 좋기 때문에 MySQL/MariaDB 연결 방법에 대해서 정리해 본다. 1. mysqlclient 설치 가장 먼저 해야 할 일은 MySQLClient를 설치하는 것이다. Visual Studio 기준으로 env 에서 마우스 우클릭을 통해 Manage Python Packages 에서 mysqlclient를 입력하여 설치할 수 있으며, 이는 pip를 통해 설치한 것과 동일하다. pip install mysqlclient 설치가 완료되면, 패키지가 추가된 것을 확인 할 수 있다. 2. DATABASE 설정 변경 Django의.. 2021. 3. 24.