Экранирование выполняется только тогда, когда вы передаете запрос и данные в MySQLdb отдельно. Вот как он знает, что бежать. : -)
Таким образом, выйдет только ваш второй пример:
x = ('Blah',)
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s""", x)
Обратите внимание, как я изменил x
на tuple. Это то, что ожидает MySQLdb. Это имеет смысл, поскольку вам может потребоваться передать несколько переменных. Как:
x = ('Blah','Foo23')
cursor.execute("""SELECT * FROM `accounts` WHERE `account_name` = %s OR `account_code` = %s""", x)
Дайте мне знать, если это ответит на ваш вопрос.
Удачи. : -)