2017-03-20 4 views
2

인 첫 번째 게시물로, 웹에서 볼 수있는 것처럼 보이지만 해결 된 것은 없음을 경고하고 싶습니다.SqlObject 및 SqlBuilder IN() 함수는 문자열 값이

저는 python 2.7 및 sqlobject lib의 최신 버전을 사용하고 있습니다.

내가 직면 문자열 목록 또는 튜플와 IN() 함수를 호출 할 때, 오류처럼 보이는 결과를 가지고 :

: 잘 작동하는 것 같다에서

from sqlobject.sqlbuilder import table, IN 

t = table.MyTable 
print(IN(t.s_ID, ("1", "2"))) 
>>> <SQLOp 34ec648L> 

동안 정수와를

print(IN(t.s_ID, (1, 2))) 
>>>> ((MyTable.s_ID) IN (1, 2)) 

왜 이것이 작동하지 않는 사람이 있습니까? lib에있는 문제에 대해 더 많이 생각하지만 어쩌면 내가 뭔가를 놓친 것 같아요

미리 감사드립니다!

참고 : (I 만 쿼리를 작성하고 싶은대로) 나는이 경우이 중요한 고려하지 않는다 그러나 나는 SQL 서버 2012

D. FE에이 쿼리를 전송하고 싶습니다.

답변

1

두 진술이 모두 올바른 것 같습니다. 그러나 첫 번째 문자열 (문자열 포함)의 표현은 데이터베이스에 따라 다릅니다. 즉, 각 특정 데이터베이스에 대한 쿼리에서 문자열을 표시하는 방법 (인용, 이스케이프 등)에 따라 다릅니다. 따라서 연결이나 모델처럼 sqlrepr 메서드를 가진 객체와 같이 db를 인식 할 수있는 적절한 객체가없는 문자열로 변환 할 수 없습니다. 다음 예제에서 __connection__ 객체는 postgresql 연결입니다.

>>> print(__connection__.sqlrepr(IN(t.s_ID, ("1", "2"))) 
((MyTable.s_ID) IN ('1', '2')) 
+0

감사합니다. 내가 연결 개체 instanciating 시도합니다 (나는 이미 SQL 클라이언트가 pypyodbc 개발 developped 가지고 지금 사용하지 마십시오) – DFE