2013-10-11 3 views
0

나는 sqlite에서 쿼리를 수행하는 파이썬 함수가 있습니다. 다음과 같이 : X, Y & Z는 데이터베이스의 열입니다sqlite 및 파이썬 필터 결과

def Query(X, Y, Z): 

. 다음과 같이 그래서 예를 들면 그것은 sqlite가에 갈 때

Query(1, 2, 3) 

:

<code>SELECT OUTPUT FROM IMAGES WHERE (X=?) AND (Y=?) AND (Z=?)",[X,Y,Y]</code> 

그래서,이 번호를 1, 2 & 3을하고 sqlite가에서 그들을 가져옵니다.

Query(X, Y, Z) 

예로서, 하나 이상의 빈 필드가 있습니다 : 문제의 입력이 때 나는이 나는 데이터베이스를 열 Z를 무시하려는이 경우

Query(1, 2, '') 

,하지만 난 할 수 없습니다 그것을하는 방법을 이해하십시오. 나는

SELECT OUTPUT FROM IMAGES WHERE (X=? OR X) AND (Y=? OR Y) AND (Z=? OR Z)",[X,Y,Z] 

을 시도했지만이 사항이 잘 작동하지 않습니다.

누군가가 파이썬에서 입력 한 내용이 비어있는 경우 열을 무시하는 방법을 도와 줄 수 있습니까?

+0

다른 쿼리를 실행하기 위해 if 문을 사용하지 않는 이유는 무엇입니까? 조금 더 길지만 여전히 좋은 해결책입니다. – aIKid

+0

if 문을 사용할 수 있지만 코드를 최소화하고 싶습니다. 게다가 나는 PHP에서이 문장과 비슷한 것을 시도해 보았고 잘 동작했다. 그래서 이것은 내 마음 속의 첫 번째 해결책이었다. – user2869440

답변

0

빈 문자열 테스트에 문제가있을 수 있습니다. 다음과 비슷한 것을 시도해 볼 수 있습니다.

"SELECT OUTPUT FROM IMAGES WHERE (X=? OR ?='') AND (Y=? OR ?='') AND (Z=? OR ?='')",[X,Y,Z] 

그러나 실제로는 실제 검증 된 솔루션보다 힌트와 ​​비슷합니다.

편집

아마 당신은 이름이 필요 매개 변수 :

def Query(X, Y, Z): 
    import sqlite3 
    conn = sqlite3.connect('example.db') 
    c = conn.cursor() 
    c.execute("SELECT OUTPUT FROM IMAGES WHERE (X=:px OR :px='') AND (Y=:py OR :py='') AND (Z=:pz OR :pz='')", {"px": X, "py": Y, "pz": Z}) 

편집

sqlfiddle을보십시오.

('foo'=? OR 'foo') 

: 어떤 Y는 = 'foo에'에 대한, 그것은에 해당하는 데이터베이스 행에 대해

(Y=? OR Y) 

:

편집

하면 다음과 같은 쿼리의 단편을 고려 'foo'는 false로 변환되므로 다음과 같습니다.

당신의 Y = 'foo에'에 대한 조회 경우에만 사실 일 수

('foo'=?) 

:에 해당

('foo'=? OR false) 

.대신에 Y = ''를 쿼리하면 다음과 같이 나타납니다.

('foo'='') 

이는 분명히 틀립니다.

따라서 쿼리는 원래 OR (OR이없는 것)처럼 작동합니다.

+0

모든 입력이 제대로 작동하고 있다면 테스트를 수행했습니다. 또한 마지막 입력 Z가 제공되지 않으면 제대로 작동합니다. 그러나 X 또는 Y가 제공되지 않으면 아무것도 가져 오지 않습니다. 이상한 소리. – user2869440

+0

쿼리가 대칭이고 X, Y 및 Z가 같은 방식으로 동작해야하기 때문에 이상하게 들립니다. 내가 게시 한 sqlfiddle을 가지고 조금 놀아보십시오. 저는 여러분이 항상 솔루션에 아주 가깝다고 생각합니다. 필자의 경우 (Webql on sqlfiddle) 대부분의 문자열은 false로 변환 된 것으로 보이므로 ** 또는 ** 절에서 대체되면 괄호 안에 그룹을 참되게 만드는 데 도움이되지 않습니다. – damix911

+0

명명 된 매개 변수가 잘 작동했습니다. 영리한 대답에 감사드립니다. – user2869440