요청 기간 동안 Azure SQL 데이터베이스에 연결해야 하는 웹 애플리케이션이 직장에 있습니다. 데이터베이스 쿼리를 더 쉽게 하기 위해 SQL Alchemy와 pyodbc를 사용합니다.
우리는 달성하고 싶은 몇 가지 목표가 있습니다.
먼저 모든 요청에 대해 새 세션을 열 수 있도록 새 세션이 생성되고 이후에 삭제되도록 요청 기능을 데코레이터로 래핑할 수 있습니다.
모든 함수 호출에서 세션을 넘겨주지 않고도 애플리케이션 전체에서 세션에 쉽게 액세스할 수 있도록 하기 위해 싱글톤 패턴을 사용합니다. 하지만 동시에 여러 요청을 처리하기 위해 여러 스레드를 실행하므로 세션 개체와 관련된 경쟁 조건이 없는지 확인해야 합니다.
SQL Alchemy에는 이 작업을 더 쉽게 해주는 훌륭한 유틸리티인 범위 지정 세션이 있습니다.
이를 사용하기 위해 연결 팩토리를scoped_session() 호출로 래핑합니다.
from urllib.parse import quote_plus from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session connection_string = "..." engine = create_engine("mssql+pyodbc:///?odbc_connect={}".format(quote_plus(connection_string)) session_factory = sessionmaker(bind=engine) Session = scoped_session(session_factory)
이제 세션을 사용하고 싶을 때마다 Session()을 호출하면 SQL Alchemy가 기존 세션 개체를 재사용하는지 확인합니다. 완료되면 Session.remove()를 호출하여 세션을 닫을 수 있습니다. SQL Alchemy에서는 스레드가 완료되었는지 알 수 있는 방법이 없으므로 직접 수행해야 합니다.
액세스 토큰을 사용하여 Azure SQL 데이터베이스에 대한 연결을 설정하는 방법을 설명하는 게시물이 있지만 이에 대한 가장 좋은 리소스는 SQL Alchemy 문서 자체입니다.
자세한 내용을 함께 살펴보겠습니다. 먼저 연결 문자열이 필요합니다. 관리 ID(또는 로컬 개발을 위한 Azure CLI)를 사용하기를 원하므로 연결 문자열에 자격 증명을 입력하지 않습니다.
드라이버={SQL Server용 ODBC 드라이버 18};데이터베이스=YOUR_DB;Server=tcp:you.database.windows.net,1433;Encrypt=yes;TrustServerCertificate=no;연결 시간 초과=30
우리의 일반적인 계획은 다음과 같습니다.
이제 코드를 살펴보겠습니다.
from urllib.parse import quote_plus from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session connection_string = "..." engine = create_engine("mssql+pyodbc:///?odbc_connect={}".format(quote_plus(connection_string)) session_factory = sessionmaker(bind=engine) Session = scoped_session(session_factory)
이로써 우리는 목표를 달성했습니다. scoped_session()을 사용하면 요청이 들어올 때마다 새 세션을 열 필요가 없지만(이것은 우리를 위해 처리됩니다) 매달린 세션이 너무 많지 않도록 마지막에 세션을 닫아야 합니다.
또한 자체 ID(로컬 개발용) 또는 웹 서비스의 관리 ID를 사용하여 SQL 데이터베이스에 연결합니다. 새로운 연결이 생성될 때마다 연결 문자열을 수정합니다.
범위 세션의 개념을 이해하는 데 도움을 준 David에게 큰 감사를 드립니다.
위 내용은 Entra ID 토큰을 사용하여 SQL Alchemy에서 Azure SQL 데이터베이스에 연결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!