강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Idea님의 프로필 이미지
Idea

작성한 질문수

Airflow 마스터 클래스

섹션 9. Connection & Hook - 50강 관련 질문

작성

·

14

0

안녕하세요.

오늘도 Airflow 강의를 듣던 중 에러가 나는 부분이 있어 질문드리고자 합니다 ㅠ

 

우선 customized 된 Hook의 bulk_load 기능을 사용하는 과정에서 에러가 발생하는데요..

강의에서 알려주신대로 아래와 같이 두 개의 파이썬 파일을 작성해서 DAG을 실행했습니다.

(코드도 GitHub에 올려주신 것과 동일합니다)

  1. plugins/hooks/custom_postgres_hook.py

  2. dags/dags_python_with_custom_hook_bulk_load.py

 

그런데 DAG 실행 과정에서 아래와 같은 에러가 발생합니다.

(Failure caused by 'Engine' object has no attribute 'cursor')

image.png

 

제가 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의 연결 객체를 사용해야 합니다.

문제 해결을 위한 고려 사항

  1. SQLAlchemy 연결 사용:

    • Pandas to_sql()을 사용할 때에는 반드시 SQLAlchemy의 Connectable 객체를 사용해야 합니다. 즉, create_engine()으로 생성된 엔진을 직접 사용하시길 권장합니다.
  2. 데이터베이스 URI 확인:

    • custom_postgres_hook.py에서 사용되는 데이터베이스 연결 문자열이 정확히 일치하는지 확인하세요. postgresql://user:password@host:port/dbname 형태인지 반드시 재확인해 보시길 바랍니다.
  3. 버전 확인:

    • Pandas와 SQLAlchemy의 버전 차이로 인한 문제가 있을 수 있습니다. 여러분이 참고하신 자료와 현재 사용 중인 라이브러리의 버전을 비교하여 최신 호환 버전으로 맞추십시오.

질문에 대한 추가적인 도움이 필요하시면 다음의 유사 답변을 참고하시길 추천드립니다: sqlalchemy.create_engine으로 생성한 객체에 cursor가 없습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Idea님의 프로필 이미지
Idea

작성한 질문수

질문하기