Я сейчас использую mysqldb.
Как правильно экранировать строки в аргументах mysqldb?
Обратите внимание, что E = lambda x: x.encode('utf-8')
1) поэтому мое соединение установлено с помощью charset = 'utf8'.
Вот ошибки, которые я получаю для этих аргументов: w1, w2 = u'你好', u'我好'
self.cur.execute("SELECT dist FROM distance WHERE w1=? AND w2=?", (E(w1), E(w2)))
ret = self.cur.execute("SELECT dist FROM distance WHERE w1=? AND w2=?", (E(w1), E(w2)))
Файл "build / bdist.linux-i686 / egg / MySQLdb / cursors.py", строка 158, в исполнении
Ошибка типа: не все аргументы, преобразованные во время форматирования строки
self.cur.execute("SELECT dist FROM distance WHERE w1=%s AND w2=%s", (E(w1), E(w2)))
Это прекрасно работает, но когда w1 или w2 имеют \ inside, то выход из строя, очевидно, не удался.
Лично я знаю, что% s не очень хороший метод для аргументации из-за инъекционных атак и т. Д.