코드 :sqlite3.OperationalError : 근처에 "?": 파이썬 구문 오류 - 사용 'IN'연산자
print 'SELECT %s FROM %s WHERE %s %s %s' % (q_select, q_table, q_where, q_where_operator, q_value)
rows = cursor.execute('SELECT %s FROM %s WHERE %s %s ?' % (q_select, q_table, q_where, q_where_operator), (q_value,)).fetchall()
결과 :
SELECT ticket FROM my_table WHERE issue_key IN ('APSEC-2261')
Traceback (most recent call last):
...
File "code.py", line 1319, in validate
to_validate = db_query(q_select = 'ticket', q_table = 'my_table', q_where = 'issue_key', q_where_operator = 'IN', q_value = incident_query_list)
File "code.py", line 1834, in db_query
rows = cursor.execute('SELECT %s FROM %s WHERE %s %s ?' % (q_select, q_table, q_where, q_where_operator), (q_value,)).fetchall()
sqlite3.OperationalError: near "?": syntax error
내가 직접 정확한 쿼리를 수행 할 때 파이어 폭스의 SQLite는 관리자 SQLite는 파일, 나는 오류없이 적절한 응답을받지 :
SELECT ticket FROM my_table WHERE issue_key IN ('APSEC-2261')
179908
업데이트 :
대체를 시도하지 않고 여전히 동일한 오류가 발생합니다.
>>> test = cursor.execute('SELECT ticket FROM my_table WHERE issue_key IN ?', ('APSEC-2261',)).fetchall()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "?": syntax error
업데이트 2 :
?
DB-API의 매개 변수 대체, 여전히 같은 오류없이 시도.
>>> t = ('APSEC-2261',)
>>> cursor.execute('SELECT ticket FROM my_table WHERE issue_key IN ?', t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "?": syntax error
업데이트 3 :
왜 IN
연산자는 테이블 _ 이름으로 참조되고있다?
>>> cursor.execute('SELECT ticket FROM my_table WHERE issue_key IN \'APSEC-2261\'')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: no such table: APSEC-2261
업데이트 4 :
는 이상한 TABLE_NAME 문제를 해결했습니다.
>>> cursor.execute('SELECT remediation_ticket FROM remediation WHERE issue_key IN (\'APSEC-2261\')')
<sqlite3.Cursor object at 0x1723570>
>>> cursor.execute('SELECT remediation_ticket FROM remediation WHERE issue_key IN (\'APSEC-2261\')').fetchall()
[(u'179708',)]
업데이트 5 :
인해 100 미만의 명성에 아직 내 자신의 솔루션을 쓸 수 없습니다. 문제는 IN
연산자를 사용할 때 괄호 안에 ?
이 있어야한다는 것입니다.
>>> cursor.execute('SELECT remediation_ticket FROM remediation WHERE issue_key IN (?)', ('APSEC-2261',))
<sqlite3.Cursor object at 0x1723570>
>>> cursor.execute('SELECT remediation_ticket FROM remediation WHERE issue_key IN (?)', ('APSEC-2261',)).fetchall()
[(u'179708',)]
따라서 내 db_query 방법이 문제는 다음
rows = cursor.execute('SELECT %s FROM %s WHERE %s %s (?)' % (q_select, q_table, q_where, q_where_operator), (q_value,)).fetchall()
래리, 감사합니다! 여러 개의 'q_value'를 허용하도록 내 대답을 수정했습니다. – paragbaxi
정확히 말하면, 목록이 아닌 값의 파이썬 튜플을 만들어야한다는 것을 알았습니다. – paragbaxi
나는 당신의 용서를 구걸한다. 나는 명단을 기억하고 있었다. –