2012-06-19 2 views
1

WHERE 절을 사용하는 변수에서 PostgreSQL 데이터베이스의 값을 검색하려고하는데 오류가 발생합니다.PostgreSQL의 SELECT 쿼리

쿼리는 다음과 같습니다

select age into x from employee where name=name.GetValue() 

name이있는 내가 wxPython을 GUI에서 값을 입력하고있는 textcontrol입니다.

이름 스키마가 존재하지 않으므로 오류가 발생합니다.

값을 검색하는 올바른 방법은 무엇입니까?

답변

1

나는 당신이 뭘 하려는지 긍정적 모르겠지만, 문제는 문법 (대신 AS의 INTO의 오용) 것 같아요 :

SELECT age AS x FROM employee WHERE name = .... 
5

"name.GetValue는()"리터럴 문자열, 당신은 귀하의 DB에 아무것도 wxpython에 대해 아무것도 몰라 귀하의 프로그램에 변수에 대해 보내고 있습니다. db에 데이터의 값을 보내야합니다. 아마도 바운드 매개 변수를 사용해야합니다. 다음과 같음 :

cur.execute("select age from employee where name=%s", [name.GetValue()]) 
x = cur.fetchone()[0] # returns a row containing [age] from the db 

그러면 데이터베이스에 자리 표시자를 포함하는 쿼리가 만들어지고 name.GetValue() 값을 해당 자리 표시 자에 바인딩하고 쿼리를 실행합니다. 다음 줄은 쿼리 결과의 첫 번째 행을 가져 와서 해당 행의 첫 번째 항목에 x를 할당합니다.

+0

여전히 오류가 발생합니다 - (psycopg2.ProgrammingError : 연산자가 존재하지 않습니다 : character varying =?) 이 문제를 해결하는 다른 방법이 있습니까? – Black

+1

예, psycopg는 % s 스타일 매개 변수 바인딩을 사용합니까?, 이것을 반영하기 위해 내 대답을 편집했습니다. 주의 할 점은, 실행 줄은'cur.execute ("name = % s"% name.GetValue()) 직원의 나이 선택과 같지 않습니다. 문자열 보간법 (% 연산자)을 사용하면 SQL 주입. – Steve