SQLAlchemy에서 실제 SQL 쿼리 인쇄
SQLAlchemy에서 SQL 쿼리를 실행하려면 SQL 삽입 공격을 방지하기 위한 매개변수 바인딩이 필요합니다. 그러나 값을 포함하여 실제 SQL 쿼리를 얻는 것은 어려울 수 있습니다.
일반 솔루션
SQL 쿼리를 문자열로 검색하는 가장 간단한 방법은 다음을 사용하는 것입니다. str() 함수:
<code class="python">print(str(statement)) # for both ORM Query and SQL statements</code>
바운드 매개변수 구현
기본적으로 SQLAlchemy는 보안상의 이유로 매개변수를 바인딩합니다. compile_kwargs에서 literal_binds 플래그를 사용하여 이 동작을 억제할 수 있습니다:
<code class="python">from sqlalchemy.dialects import postgresql print( statement.compile(compile_kwargs={"literal_binds": True}) )</code>
리터럴 바인딩은 정수 및 문자열과 같은 기본 유형에 대해서만 지원됩니다.
매개변수 변환 사용자 정의
더 복잡한 유형을 변환해야 하는 경우 process_literal_param 메서드를 사용하여 사용자 정의 TypeDecorator를 만들 수 있습니다.
<code class="python">class MyFancyType(TypeDecorator): impl = Integer def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>
이렇게 하면 다음과 같은 쿼리가 생성됩니다.
<code class="sql">SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)</code>
위 내용은 SQLAlchemy에서 실행된 실제 SQL 쿼리를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!