SQLAlchemy 표현식을 디버깅할 때 바인드 매개변수 대신 특정 값을 포함하여 실행 중인 실제 SQL 쿼리를 확인하는 것이 중요합니다. . SQLAlchemy는 이를 위한 명시적인 방법을 제공하지 않지만 이를 달성하는 몇 가지 방법이 있습니다.
대부분의 경우 SQLAlchemy 문에서 str()을 호출하기만 하면 됩니다. 또는 쿼리:
print(str(statement))
이는 ORM 쿼리(쿼리 개체)와 순수 SQL 문(select() 등) 모두에 작동합니다.
특정 데이터베이스 엔진용으로 컴파일된 명령문이 필요한 경우 compile() 메서드를 사용할 수 있습니다.
print(statement.compile(some_engine))
또는 엔진이 없는 경우 방언을 지정할 수 있습니다.
from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))
특정 상황에서는 바인딩된 매개변수를 최종 SQL 문자열에 인라인할 수 있습니다. 이는 literal_binds 플래그를 사용하여 달성할 수 있습니다:
print(statement.compile(compile_kwargs={"literal_binds": True}))
이는 정수 및 문자열과 같은 기본 유형에만 지원됩니다. 더 복잡한 유형의 경우 사용자 정의 유형 데코레이터를 생성해야 할 수도 있습니다.
지원되지 않는 유형의 인라인 렌더링을 지원하려면 process_literal_param 메서드를 사용하여 사용자 정의 유형 데코레이터를 생성할 수 있습니다.
class MyFancyType(TypeDecorator): ... def process_literal_param(self, value, dialect): return f"my_fancy_formatting({value})"
이 데코레이터를 사용하면 복잡한 값을 인라인할 수 있습니다.
print(tab.select().where(tab.c.x > 5).compile(compile_kwargs={"literal_binds": True}))
다음과 같은 출력을 생성합니다.
SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)
위 내용은 SQLAlchemy에서 디버깅하는 동안 값이 포함된 실제 SQL 쿼리를 인쇄하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!