Вы просто не можете использовать заполнители для имен столбцов или таблиц. У меня нет авторитетной цитаты для этого - я «знаю» это только из-за того, что пробовал это и от неудачи. Это имеет смысл:
execute
-ing) инструкцию SQL перед извлечением, поскольку все части оператор может быть заменен. Короче говоря, вы нашли Правильный путь - использовать строковое форматирование.
c.execute('SELECT {} FROM {} WHERE id=?'.format(column, table), row))
1 Не все параметры котировки драйверов - oursql
нет, поскольку он отправляет SQL и аргументы на сервер отдельно.
Как ответил @unutbu, нет способа использовать заполнители для имен таблиц / столбцов. Мое предложение делать то, что вы делаете сейчас, но также указывать имена таблиц, чтобы защитить себя от таблицы или столбца, у которого может быть нечетное имя.
Что говорит SQL-стандарт об использовании backtick (`)? уже объясняет это в некоторой степени, и, несмотря на мнение в этом ответе, я бы сказал, что в вашем случае цитирование - хорошая идея.