>  기사  >  백엔드 개발  >  SQLAlchemy에서 디버깅하는 동안 값이 포함된 실제 SQL 쿼리를 인쇄하는 방법은 무엇입니까?

SQLAlchemy에서 디버깅하는 동안 값이 포함된 실제 SQL 쿼리를 인쇄하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-18 13:29:03271검색

How to Print Actual SQL Queries with Values During Debugging in SQLAlchemy?

SQLAlchemy 쿼리 디버깅: 값이 포함된 실제 SQL 인쇄

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.