인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

qpal1zm23님의 프로필 이미지

작성한 질문수

실전! FastAPI 입문

Oracle DB 연결과 관련해 질문이 있습니다..

해결된 질문

작성

·

22

0

Sqlalchemy 라이브러리와 Python-oracledb 드라이버를 이용해 DB 연결을 하려고 하는데 쉽지 않습니다..

저는 service name 정보만 있고 SID 정보는 없는 상태인데, 공식문서를 참고해 아래와 같이 접속을 시도해도 에러가 발생합니다..ㅠ

에러 내용 )

File "src/oracledb/impl/thin/transport.pyx", line 289, in oracledb.thin_impl.Transport.send_oob_break

OSError: [Errno 22] Invalid argument


DB 접속 코드 )

import sqlalchemy

engine = sqlalchemy.create_engine("oracle+oracledb://MY_USERNAME:MY_PASSWORD@MY_DB_HOST:MY_DB_PORT/?service_name=MY_DB_SERVIC_NAME")


disable_oob=True로 하면 될 것 같은데, sqlalchemy에서 어떻게 해당 값을 세팅해야 하는지 모르겠습니다...ㅠ
따로 설정파일을 만들어야 하나요?ㅠㅠ

답변 1

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. qpal1zm23님.

Oracle Database에 연결할 때 발생하는 OSError: [Errno 22] Invalid argument 에러는 종종 TCP Out-of-Band (OOB) 데이터를 비활성화해야 할 필요와 관련이 있습니다. 이 문제는 disable_oob=True 옵션을 추가함으로써 해결될 수 있는데요, SQLAlchemy와 Python-oracledb를 사용하는 경우 이 설정을 연결 문자열에 포함할 수 있습니다.

현재 SQLAlchemy에서는 Oracle 연결 문자열의 일부로 disable_oob 옵션을 직접 지정할 수 없습니다. 그러나, create_engine 함수의 connect_args 파라미터를 사용하여 Python-oracledb 드라이버의 설정을 전달할 수 있습니다. 아래는 이 방법을 적용한 예제입니다:

import sqlalchemy

engine = sqlalchemy.create_engine(
    "oracle+oracledb://MY_USERNAME:MY_PASSWORD@MY_DB_HOST:MY_DB_PORT/?service_name=MY_DB_SERVICE_NAME",
    connect_args={
        "disable_oob": True
    }
)

위와 같이 connect_args 딕셔너리를 사용하여 disable_oob 옵션을 True로 설정함으로써 문제가 해결될 수 있습니다. 이는 TCP 연결에서 Out-of-Band 데이터를 비활성화하여 에러를 방지하게 됩니다.

관련된 내용을 더 알고 싶다면, 아래의 유사 질문을 참고해 보세요:

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