2014-12-23 3 views
1

psycopg와 함께 매개 변수화 된 쿼리를 사용하여 여러 행을 삭제하려고합니다. 내 스크립트 같은 삭제 문이 있습니다psycopg2.ProgrammingError : "%"또는 근처의 구문 오류

cur.executemany("WITH remove_rows as (DELETE FROM users WHERE userid = %s RETURNING *), insert_rows as (INSERT INTO old.users SELECT * FROM remove_rows RETURNING *) SELECT count(*) from insert_rows;", (id,)) 

을 그리고 내가 오류는 다음과 같습니다

Traceback (most recent call last): 
    File "removal.py", line 17, in <module> 
    cur.executemany("WITH remove_rows as (DELETE FROM .users WHERE userid = %s RETURNING *), insert_rows as (INSERT INTO old.users SELECT * FROM remove_rows RETURNING *) SELECT count(*) from insert_rows;", (id,)) 
psycopg2.ProgrammingError: syntax error at or near "%" 
LINE 1: ...ws as (DELETE FROM users WHERE userid = %s RETURNI... 

내가 userid = %s에서 공백을 제거하고 userid=%s, 내가 메시지 column "s" does not exist과 같은 오류가 발생했습니다 만들었을 때.

psycopg2 매개 변수화가 CTE를 처리하지 않는지 궁금한가요?

+0

'cur.executemany()'호출에 초점을 맞추었지만, CTE에 익숙하지 않아'cur.execute()'를 대신 사용한다고해도 확신 할 수 없습니다. 나는 대답을 삭제했다. –

+0

게시 후 알게되었습니다. execute() 내 문제를 해결 :) 감사 – user1917679

+0

좋아, 내 대답을 취소 삭제. :-) –

답변

0

executemany()중 하나가 아닌 시퀀스의 중첩 세트 집합을 사용합니다.

다른 목록으로 매개 변수를 래핑하거나 대신 cur.execute()을 사용하여 쿼리를 한 번만 실행하십시오.