2010-05-11 4 views

답변

1

준비된 명령문을 작성할 때, "템플리트"SQL 코드가 이미 DBMS로 보내어 져서 표현식 트리로 컴파일됩니다. 값을 전달하면 해당 라이브러리 (파이썬 sqlite3 모듈)가 값을 문에 병합하지 않습니다. DBMS는 않습니다.

여전히 일반 SQL 문자열을 생성하려는 경우 문자열 바꾸기 기능을 사용하여 자리 표시자를 값 (이스케이프 후)으로 바꿀 수 있습니다.

무엇이 필요합니까?

+0

불행히도 다른 응용 프로그램에 전달하기 위해 sqlite 호환 SQL을 생성해야합니다. 모든 이스케이프 처리 등을 수행하기 위해 sqlite3 또는 sqlalchemy와 같은 것을 사용하고 싶었습니다. –

+0

이 경우 나는 이스케이프와 문자열 연산으로 대체하는 것이 적절할 것이라고 생각합니다. 준비된 문장이 SQLite 용으로도 생성 되었습니까? 그렇지 않다면 다른 DB의 방언에서 SQLite의 방언으로 일부 표현식을 변환해야 할 수도 있습니다. 자바에서, hibernate는 dialect-specific 표현을 생성하기위한 클래스를 제공한다. 나는 다른 방언으로 변환하기 위해 방언 특유의 표현을 "퇴화시키는"기능을 제공할지 여부를 확신하지 못한다. 그리고 나는 그것이 SQL 칼시 메미에서 어떻게 구현되는지 모른다. – chiccodoro

2

준비된 명령문을 실행할 때 새로운 SQL이 생성되지 않습니다. 준비된 구문의 개념은 SQL 쿼리와 그 데이터가 별도로 전송된다는 것입니다. (그 때문에 모든 인수를 이스케이프 할 필요가 없습니다.) 쿼리는 준비된 후에 최적화 된 형태로 저장 될 가능성이 큽니다.

+0

아! 고맙습니다. 그게 어떻게 작동하는지 나는 몰랐다. 의미가 있습니다 :) –