Причина, по которой вы получаете кавычки, заключается в том, что cursor.execute
добавляет эти значения, которые вы передаете в качестве аргументов. Это полностью подходит для вашего второго аргумента, потому что, если значение «hello» было вставлено в запрос «как есть», вы бы получили запрос, подобный следующему:
SELECT '23.34.67.0/22' CONCAT(DAY_31, hello) DAY_31 FROM Jule
, и у вас будут ошибки, сообщающие вамчто MySQL не может определить, на что должен ссылаться hello
.
Очевидно, что это не подходит для ситуаций, когда вы хотите передать имена полей или любую другую частьзапрос, который не является примитивным строковым значением. В этих случаях вам нужно будет объединить их в строку перед выполнением запроса. Один из способов сделать это можно с помощью f-строк , но есть и другие альтернативы. Вот ваша строка cursor.execute
с именами полей, объединенными с использованием f-строк:
cursor.execute(f"SELECT %s, CONCAT({'DAY_'+_day}, %s) {'DAY_'+_day} FROM Jule", (p, as_tmp))
Обратите внимание, что я также удалил 'DAY_'+_day
из списка аргументов.
Важное примечание:
Хотя это должно работать следующим образом (хотя я думаю, что вам также понадобилась дополнительная запятая после SELECT '23.34.67.0/22'
, которую я добавил в приведенном выше примере), очень важно, чтобыесли day
имеет значение, которое исходит из-за пределов вашего приложения (например, передано пользователем в поле формы), вы должны убедиться, что оно точно в нужном формате, прежде чем вставлять его в ваш запрос. Проверка того, что строковое значение является целым числом может быть одним из способов сделать это. Это важно по той причине, что без этого ваше приложение может быть подвержено SQL-инъекции , что потенциально позволит пользователям запускать произвольный SQL в вашей базе данных. Если значение day
рассчитывается исключительно вашим приложением, вам не нужно беспокоиться об этом.