Python 266

[Python] pymysql.err.internalerror (1054 unknown column in 'field list' )

현상 Python으로 MySQL을 연동하여 사용 중이다. 특정 테이블에 데이터를 INSERT 하려고 했더니 아래와 같은 에러 메세지가 발생하면서 실패했다. pymysql.err.internalerror (1054 unknown column in 'field list') 어떤 부분이 문제였는지 적어둔다. 원인 원인은 크게 두 가지로 정리할 수 있다. 컬럼이 테이블에 실제로 없는 경우 테이블에 컬럼이 존재하지만 컬럼의 데이터 타입과 INSERT 할 데이터의 타입이 맞지 않는 경우 이 글의 경우에는 후자로 INT로 정의되어 있던 컬럼에 문자열 데이터를 추가하려고 했던 게 원인이었다. 해결 이 글에서는 데이터베이스 테이블의 컬럼 타입을 INT에서 VARCHAR로 변경하여 해결했다. + 조금 검색해보니 주로 Py..

Python 2023.06.05

[Selenium] AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'

현상 오랜만에 이전에 Selenium으로 만들어두었던 Python 코드를 살펴봤다. 실행을 시켜보고자 Selenium 패키지와 크롬 드라이버를 새로 설치하고 실행시켰더니 아래와 같은 에러가 발생했다. 원인 기존에 selenium 3.141.0을 사용하다가 최신 버전인 selenium 4.9.1을 설치해서 테스트했는데, 확인해보니 Selenium의 버전이 올라가면서 find_element 관련 함수에 변경이 있었던 모양이다. find_element_by_xpath, find_element_by_id, find_element_by_xpath와 같이 검색 기준 별로 함수를 제공하는 대신 find_element 함수로 통합된 것으로 보인다. 해결 find_element_by_XXX 함수 대신 find_eleme..

Python 2023.05.29

[Python] billiard - 멀티프로세싱

개요 이전에 2023.02.19 - [Python] multiprocessing을 통해 Python으로 멀티프로세싱을 수행해 보았는데, 최근 billiard라는 다른 패키지를 사용하여 멀티프로세싱을 수행하게 되었다. 이 글에서는 billiard 패키지 사용법을 정리해 둔다. billiard Python 2.7 multiprocessing 패키지를 Fork한 패키지다. Celery에서 사용하는 패키지로 Celery 팀에 의해 유지보수되고 있다. Github : https://github.com/celery/billiard + Airflow에서 CeleryExecutor를 사용하고 있다면 추가 패키지 설치 없이 멀티프로세싱을 적용할 수 있을 것 같다. 설치 pip를 이용해 설치할 수 있다. pip insta..

Python 2023.05.27

[Python] Pandas - 여러 컬럼 추가

개요 DataFrame에 스칼라 값인 컬럼이 여럿 추가하고 싶을 때는 단순 할당을 반복하거나, import numpy as np import pandas as pd map_code_message = [ {'code':'00','return_message':'Continue'}, {'code':'01','return_message':'Switching Protocol'}, {'code':'02','return_message':'Processing'}, {'code':'03','return_message':'Early Hints'}, ] df = pd.DataFrame(map_code_message) df['server'] = 'web' df['stage_env'] = 'dev' insert 함수를 반복해서..

[Python] Pandas - Dataframe 차집합 구하기

개요 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1 (merge / join)에서 두 데이터프레임에 대한 INNER JOIN과 OUTER JOIN(left, right, full)에 대해서 살펴봤다. 이 글에서는 두 데이터프레임에 대한 LEFT ANTI JOIN, RIGHT ANTI JOIN... 즉, 차집합을 구하는 방법을 정리한다. 예시 데이터 예시로 아래의 데이터프레임 두 개를 사용하여 글을 작성한다. import pandas as pd df1 = pd.DataFrame( [ (1, 345, 'B', True), (2, 100, 'C', False), (3, 300, 'B', False), (4, 151, 'A', False), (5, 212, 'A', True) ],..

[Python] 파일 존재 여부 확인 / 삭제

개요 Python으로 서버에 저장되어 있는 파일을 다루어야 한다. 이 글에서는 서버에 원하는 파일이 있는지 확인하고 삭제하는 방법을 적어둔다. 경로 존재 여부 확인 os.path.exists는 입력받은 경로가 존재하는지 확인하여 bool 데이터를 반환한다. import os if __name__ == '__main__': file_path = 'D:\\PycharmProjects\\airflow_test\\val_test.py' dir_path = 'D:\\PycharmProjects\\airflow_test' print(f'{file_path}: {os.path.exists(file_path)}') print(f'{dir_path}: {os.path.exists(dir_path)}') 파일 여부 확인 ..

Python 2023.04.30

[Python] subprocess.Popen - 시스템 명령어 실행

개요 2023.02.08 - [Python] 시스템 명령어 실행에서 정리하지 않았던 subprocess.Popen 객체에 대해 추가적으로 정리한다. Popen 객체 이전 글에서 살펴봤던 subprocess.run은 내부적으로 Popen 객체를 통해 동작한다. subprocess.run은 명령어 실행 후 종료할 때까지 대기하지만 Popen은 백그라운드 프로세스로 실행하며 세밀하게 시스템 명령을 사용할 수 있다. class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, unive..

Python 2023.04.27

[Python] globals() - 전역 변수 확인 및 설정

개요 2022.10.01 - [Python] 전역/지역 변수와 범위에서 전역변수와 지역변수에 대해 간단히 정리했다. 이 글에서는 특정 모듈 내에서 사용되는 전역 변수를 확인하고 설정하는 방법을 정리한다. globals() Python 내장 함수 중 하나로, 현재 모듈에서 사용하는 전역 변수의 이름과 값으로 이루어진 Dictionary를 반환한다. 예로 들어 아래와 같이 test 함수 내에 지역 변수 a, b가 정의되어 있고, 전역 변수로 c, b가 정의되어 있는 경우 globals 함수의 출력을 살펴본다. def test(): a = 1 b = 2 test() c = 3 b = 4 print ("Global Variables in this module") print (globals()) 실행 결과 Glo..

Python 2023.04.20

[Python] 객체 속성 관련 함수

개요 이번 글에서는 Python에서 객체의 속성을 다룰 때 사용하는 setattr, getattr, hasattr, delattr 함수에 대해 정리한다. 예시 클래스 및 객체는 아래와 같이 사용한다. class Person: name = 'Adam' p = Person() print(p.name) setattr 객체에 속성을 설정한다. 설정하고자 하는 값이 객체에 없다면 속성을 추가하고 값을 할당한다. 반환 값은 없다. setattr(object, attribute_name, value) 예시) class Person: name = 'Adam' p = Person() setattr(p, 'name', 'James') setattr(p, 'age', 20) print(p.name, p.age getattr..

Python 2023.04.16

[Python] Pandas - read_csv 컬럼 타입 지정

개요 Pandas.read_csv 함수를 이용해 CSV 파일을 읽어 들이면 데이터의 타입을 추론하여 DataFrame을 생성한다. 그러다 보니 간혹 문자열로 저장한 네 자리 숫자의 형식이나 소수점 둘째 자리 등의 자릿수가 휘발될 때가 있다. 예시 코드 import numpy as np import pandas as pd map_code_message = [ {'code':'00','return_message':'Continue'}, {'code':'01','return_message':'Switching Protocol'}, {'code':'02','return_message':'Processing'}, {'code':'03','return_message':'Early Hints'}, ] df = pd...