작성
·
14
0
안녕하세요.
오늘도 Airflow 강의를 듣던 중 에러가 나는 부분이 있어 질문드리고자 합니다 ㅠ
우선 customized 된 Hook의 bulk_load 기능을 사용하는 과정에서 에러가 발생하는데요..
강의에서 알려주신대로 아래와 같이 두 개의 파이썬 파일을 작성해서 DAG을 실행했습니다.
(코드도 GitHub에 올려주신 것과 동일합니다)
plugins/hooks/custom_postgres_hook.py
dags/dags_python_with_custom_hook_bulk_load.py
그런데 DAG 실행 과정에서 아래와 같은 에러가 발생합니다.
(Failure caused by 'Engine' object has no attribute 'cursor')
제가 docker-compose.yaml 파일 내 postgres_custom 서비스를 정의할 때, 5433:5432로 포트 포워딩 해줘서 그런가 싶어서, custom_postgres_hook.py 코드에서 uri 변수에 포트번호를 5432로 같이 부여해줬음에도 동일한 에러가 발생합니다.
무엇이 문제일까요..?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Idea님
Airflow를 사용하시면서 발생한 ‘Engine’ 객체의 ‘cursor’ 속성 관련 오류에 대해 고민 중이시군요. 이 문제는 보통 SQLAlchemy 엔진을 사용할 때 발생하는 특이한 상황입니다. 여러분의 문제는 SQLAlchemy의 엔진 객체에는 cursor
메서드가 없다는 점에서 발생합니다. Pandas의 to_sql()
메서드는 SQLAlchemy의 연결 객체를 사용해야 합니다.
SQLAlchemy 연결 사용:
to_sql()
을 사용할 때에는 반드시 SQLAlchemy의 Connectable
객체를 사용해야 합니다. 즉, create_engine()
으로 생성된 엔진을 직접 사용하시길 권장합니다.데이터베이스 URI 확인:
custom_postgres_hook.py
에서 사용되는 데이터베이스 연결 문자열이 정확히 일치하는지 확인하세요. postgresql://user:password@host:port/dbname
형태인지 반드시 재확인해 보시길 바랍니다.버전 확인:
질문에 대한 추가적인 도움이 필요하시면 다음의 유사 답변을 참고하시길 추천드립니다: sqlalchemy.create_engine으로 생성한 객체에 cursor가 없습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.