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

Mary-Kate Olsen
풀어 주다: 2024-10-18 13:29:03
원래의
272명이 탐색했습니다.

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

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!