Из того, что я вижу, вы не можете использовать '?' для маркера параметра с
MySQLdb (из коробки)
вы можете однако используйте именованные параметры
т.е.
cursor.execute("%(param1)s = %(param1)s", {'param1':1})
будет эффективно выполняться
1=1
в mysql
но вроде как Эли ответил (но не хакерский)
вы могли бы вместо этого сделать:
MyNewCursorModule.py
import MySQLdb.cursors import Cursor
class MyNewCursor(Cursor):
def execute(self, query, args=None):
"""This cursor is able to use '?' as a parameter marker"""
return Cursor.execute(self, query.replace('?', '%s'), args)
def executemany(self, query, args):
...implement...
в этом случае у вас будет собственный курсор, который будет делать то, что вы хотите, чтобы он делал
и это не хак. Это просто подкласс;)
и используйте его с:
from MyNewCursorModule import MyNewCursor
conn = MySQLdb.connect(...connection information...
cursorclass=MyNewCursor)
(вы также можете передать класс функции connection.cursor, чтобы создать его там, если вы хотите использовать обычное выполнение большую часть времени (временное переопределение))
... вы также можете изменить простую замену на что-то более правильное
(при условии, что есть способ избежать знака вопроса), но это то, что я
оставь до тебя :)