Запросы параметров Python MySQL для динамических имен таблиц
Я хочу запросить таблицы MySQL, используя мою программу python. Однако таблицы, которые я хочу запросить, - это те, имена которых передаются в качестве переменных (параметров).
Я попробовал что-то вроде этого:
readTable_query = """SELECT * FROM %s"""
readTable_cursor.execute(readTable_query, (table_name))
Проблема заключается в том, что динамически генерируемый SQL-запрос заключает имя таблицы в кавычки, то есть вместо того, чтобы генерировать запрос типа "SELECT * FROM products", он генерирует запрос типа "SELECT * FROM products". Это приводит к сбою моей программы и выбрасывает ошибки. Есть ли обходной путь?
Я знаю, что могу объединить запрос, но это приведет к риску безопасности SQL-инъекции.
Полный код для справки:
import MySQLdb
table_name = 'products'
db_connection = MySQLdb.connect(host,user,passwd,db)
readTable_cursor = db_connection.cursor()
readTable_query = """SELECT * FROM %s"""
readTable_cursor.execute(readTable_query, (table_name))
1 ответ:
Согласно http://dev.mysql.com/doc/refman/5.0/en/identifiers.html , допустимые имена таблиц состоят из следующих символов. [0-9a-zA-Z_$] Итак, вам не составит труда написать свой собственный валидатор:
import re table_name_validator = re.compile(r'^[0-9a-zA-Z_\$]+$') if not table_name_validator.match(table_name): raise ValueError('Hey! No SQL injecting allowed!')