コード:sqlite3.OperationalError:近くに "?":Pythonで構文エラー - 使用して '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
私が上で直接、正確なクエリを実行するとFirefoxの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
オペレータは、table_nameの形式で参照されていますか?
>>> 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方法は、問題が一つIN
演算子を使用するとき、彼らは括弧、(?)
で?
を持っている必要があります以下の
rows = cursor.execute('SELECT %s FROM %s WHERE %s %s (?)' % (q_select, q_table, q_where, q_where_operator), (q_value,)).fetchall()
ラリー、ありがとう!私は複数の 'q_value'sを許すように私の答えを修正しました。 – paragbaxi
正確には、リストではなく値のPythonタプルを作成しなければならないことがわかりました。 – paragbaxi
私はご容赦ください。私はリストを覚えていた。 –