[MySQL] 테이블 내 중복 데이터 삭제
·
MySQL
서론테이블에 UNIQUE 제약 조건이 없거나, 모종의 이유(?)로 중복 값이 들어있는 경우가 있다.아래의 쿼리를 사용하면 pk가 가장 작은 값은 살아남고, 나중에 들어온 중복 값들을 찾아 삭제한다.이 쿼리를 실행하기 전, 반드시 백업을 해놓고 실행하는 것을 권장한다.중복 제거 쿼리DELETE aFROM [테이블 이름] a, [테이블 이름] bWHERE a.[pk 컬럼] > b.[pk 컬럼] AND a.[중복 값이 들어있는 컬럼] = b.[중복 값이 들어있는 컬럼]; 주의 사항`테이블 이름`은 2개를 작성하지만, 테이블 이름은 똑같아야 한다.마찬가지로 `pk 컬럼`도 똑같은 이름을 작성해야하며, `중복 값이 들어있는 컬럼`도 마찬가지다.사용 예시DELETE aFROM test_db.user a, test_..
[python] pip install -r requirements.txt 에러 잡기
·
카테고리 없음
pip freeze > requirements.txt 위의 명령어로 현재 python 경로에 있는 모듈들의 버전을 requirements.txt로 저장할 때가 있다. 그럴 때, 다음과 같이 버전 표기가 아닌 @ file://path 형식으로 되있는 모듈들은 다른 환경에서 설치가 되지 않는 에러가 발생한다. 다른 환경에선 실제 모듈이 설치된 경로가 없거나 다를 수 있기 때문이다. astroid==2.12.13 asttokens @ file:///opt/conda/conda-bld/asttokens_1646925590279/work async-generator==1.10 attrs==21.2.0 backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/wo..
[python] pandas DataFrame Index 초기화
·
Python/pandas
pandas의 iloc(loc) 메서드나 groupby 메서드를 사용하다보면 DataFrame의 특정 행마다 Index의 연속성이 끊어질 때가 있다. 특히 groupby 메서드로 그루핑한 뒤 각 그룹별로 Index를 새로 0 부터 만들고 싶을 때 reset_index 메서드를 사용하면 된다. 아래 코드는 과일 종류가 '사과', '포도', '배'가 있다고 가정할 때, 각각의 당도가 3, 3, 5인 DataFrame을 예시로 든다. # col_0, col_1 을 각 컬럼으로 하는 DataFrame df = pd.DataFrame({'과일': ['사과', '포도', '배'], '당도': [3, 3, 5]}) 결과 과일당도 0사과3 1포도3 2배5 위에서 만든 DataFrame(df)에서 '당도'를 기준으로 그..
[Python] SMTP, email, pandas 라이브러리 활용한 이메일 자동화 (RPA) (한글 깨짐 해결)
·
Python/Python Distilled
개발 환경 - 이메일 서버/포트/2차 인증 사용 여부 SERVER: smart.whoismail.net PORT: 587 2차 인증 사용 여부: 사용안함 RPA 프로세스 pymysql connect 로 세션 생성 pandas 라이브러리로 DB를 조회하여 DataFrame 으로 저장 (DB에 발송할 이메일 주소를 함께 가져오지만, 보안상 간단히 DataFrame 내 'A' Column 으로 가정) 발송할 메일 내용이 될 HTML 템플릿을 만든다. for loop을 돌면서 HTML 템플릿 내부에 df.to_html() 메서드로 만든 df 테이블을 삽입한다. 메일 발송 코드 전문 import os import datetime import pymysql # MySQL Server connection import..
급할수록 돌아가자
·
내 생각
2022년 한 해 동안 일하다가 공부하고, 공부하다 일하고.. 모든 직장인들이 그렇겠지만, 유난히 바쁘고 피곤했던 나날들의 연속이었다. 그런 나날들을 겪으며 깨달은 점은 개발은 역시 내 적성에 너무나도 잘 맞는다는 것이다. (진~짜 재밌다.) 그런데, 새로운 프로젝트를 할 때마다 느끼는 것이 하나 있다. 바로 머리 속에는 어렴풋이 있는 내용들이 정리가 되지않아 뒤죽박죽 상태라는게 계속 찜찜했다. 이 찜찜함을 해소할겸, 내 자신의 성장을 일기처럼 기록하기 위해 블로그를 만들었지만, 퇴근하고 '이제 글을 써야겠다' 라는 생각들 때면 항상 밤 12시가 넘어있었다. 매일 바쁘다는 핑계로 정리를 미뤄왔더니, 다음 날에 미루는건 더 쉬워졌다. 이렇게 정리가 안된 상태로 몇 주가 지나니, 정리하고자 하는 내용들이 쓰..
jupyter notebook 가상환경 연결하기 (아나콘다)
·
Python/Anaconda
문제 발생 scikit-learn, seaborn, graphviz만 설치된 가상환경을 아나콘다로 새로 생성. vscode에서 작업 후, mark-down으로 ML 학습을 정리하려 jupyter notebook을 열어 실행결과를 확인하려는데, scikit module을 찾을 수 없다는 ModuleNotFoundError: No module named 'sklearn' 에러가 발생. 이를 해결하기 위해 구글링 후, jupyter notebook에 원하는 가상환경을 연결하는 방법을 찾아서 해결함. 이 포스팅은 해결 과정을 작성함. 본인의 환경 - macbook m1 macOS - brew로 python 3.10.7 설치 (python 설치 경로: /opt/homebrew/bin/) (명령어: brew ins..
[python] 대입 연산자 (:=)
·
Python/Python Distilled
표현식이란 구체적인 값으로 평가하는 계산을 의미한다. 표현식은 항상 대입문의 오른쪽에 나타난다. 이 포스팅은 리터럴, 이름, 연산자, 함수 등의 조합으로 표현식이 주어질 때, 대입 연산자를 사용하는 방법에 대한 글이다. 대입 연산자는 := 로 표현하는데, 바다코끼리 엄니와 비슷하게 생겨서 바다코끼리 연산자라고도 한다. While (n:=f.readline()): print(n) 위의 예시에서 n:=f.readline() 부분은 괄호로 감싸주지 않으면 문법 오류로 실행되지 않는다. 다른 예시로, 표현식을 평가에 사용하는 경우가 있다. if (len(n):=f.readline) >= 10: print(n)
[MySQL] 프로세스 확인과 프로세스 죽이기
·
MySQL
MySQL Workbench를 통해 스키마를 수정하거나, 조회를 할 때 종종 이런 에러가 발생한다.Error Code: 2013. Lost connection to MySQL server during query원인은 2가지 정도로 보인다.`쿼리 수행 시간`이 `제한 시간`보다 초과되서 강제로 연결이 끊어짐특정 쿼리에서 `교착상태`가 발생 이번 글은 `교착상태`가 원인일 때 해결하는 방법이다. 프로세스 확인show processlist;여기서 팁스토리님의 글을 참고하여, 각 컬럼의 뜻을 보자.ID : 클라이언트의 프로세스 ID (스레드 번호)USER : 프로세스와 관련된 사용자 이름 (스레드에 접속하고 있는 MySQL 유저명)HOST : 클라이언트가 연결된 호스트 (유저가 접속하고 있는 호스트명 및 IP주..