2016-10-21 1 views
-1

필자의 요구 사항은 테이블에 열 값 목록과 일치하는 항목이 있는지 확인하는 것입니다. 다음 쿼리를 사용하고 있습니다 :여러 값이 MySQLdb python의 데이터베이스에 있는지 확인하십시오.

insert_enquiry = """SELECT P_ID,Jobname FROM build_table WHERE Build_number IN %s;""" % insert_constraint 

여기 insert_constraint는 숫자 목록입니다. Build_number는 정수가있는 열입니다.

cursor.execute(insert_enquiry) 

나는 다음과 같은 오류를 얻을 : 내가 사용하여이 쿼리를 실행하려고하면

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[184, 931, 1005, 1070, 165, 99, 365, 930, 164, 98' at line 1 

을 나는이 때문에 목록에 표시 대괄호로 믿습니다. 목록을 문자열로 변환하여 제거하려고했지만 정수 목록이 문자열로 변환 된 것과 같은 오류가 발생합니다.

insert_enquiry = """SELECT P_ID,Jobname FROM product_build WHERE Build_number IN %s;""" 
cursor.executemany(insert_enquiry, insert_constraint) 

이 다음과 같은 오류를 제공합니다 :

은 또한 다음과 같은 구문을 시도

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '184' at line 1 

편집 :이 목록에서 마지막 요소를 필요

insert_enquiry = """SELECT P_ID,Jobname FROM product_build WHERE Build_number IN (%s);""" 
cursor.executemany(insert_enquiry, insert_constraint) 

insert_constraint 어떤 이유로.

+0

** IN [...] ** 대신 IN (...) **이 아닌가요? –

+0

예, 질문을 수정했습니다. 어떻게 든 insert_constraint리스트의 마지막 요소를 가져와리스트의 모든 요소를 ​​건너 뜁니다. –

답변

0

덕분에 https://stackoverflow.com/a/4574647/4077331입니다.

len(insert_constraint) 숫자를 %s으로 쿼리 문자열에 추가하는 것이 좋습니다. 이렇게하면 쿼리는 WHERE IN

insert_enquiry = "SELECT build_number,jobname FROM %s WHERE build_number IN (%s);" 
insert_enquiry_string =', '.join(map(lambda x: '%s', insert_constraint_build_num)) 
insert_enquiry = insert_enquiry % (table_name, insert_enquiry_string) 
cursor.execute(insert_enquiry, insert_constraint_build_num) 

이 문제를 해결하기위한 목록을 받아들입니다.

관련 문제