Как процитировать строку в Python, используя "mysql.connector"
Я новичок в python и пишу скрипт, который читает файл json, выполняет некоторую обработку и генерирует операторы SQL, которые в конце концов записываются в файл sql. я использую mysql.connector
на python 3.6
создать соединение.
Из этого объекта подключения мне нужно процитировать параметры, которые связаны с SQL. Я не выполняю SQL из python, иначе сам Python справился бы с этим.
Кроме того, я напрямую не использую одинарные / двойные кавычки, так как мое значение может содержать эти кавычки, и sql сломается. Кроме того, существует много символов, которые необходимо заключить в кавычки, поэтому не можете быть уверены после замены только одного символа (скажем, одиночной кавычки).
Образец кода:
import mysql.connector
con = mysql.connector.connect(user=user, password=pwd, database=database, host=host)
sql = "INSERT INTO customer_data VALUES "
values = "(default, %s, %s, %s);" % (
cust_record["name"],
cust_record["address"],
comment["date"]
)
fh.write("%s %s\n" % (sql, values))
Он пишет строку так, как она есть при создании оператора вставки, я избегал вводить одинарные кавычки.
Я также попробовал это на консоли для тестирования:
name = 'kam\al'
str = ("my name is %s" % name)
con.converter.escape(str)
Это дает: 'my name is kam\x07l'
без цитирования имени строки. То же самое в Perl может быть достигнуто с помощью метода котировки Perl DBI.
1 ответ
обновленный
Ты можешь использовать convert_to_mysql()
если вы хотите оба, и создайте соединение по-другому. Вот пример (Python 3.6):
import _mysql_connector
ccnx.connect(user='abc', database='xyz', password='def')
params = ('sdgs\adsgsdg', 'sdgs^&%"', "sdgsdg'")
print(ccnx.convert_to_mysql(*params))
Будет выводить:
(b"'sdgs\x07dsgsdg'", b'\'sdgs^&%\\"\'', b"'sdgsdg\\''")
Они уже процитированы и сбежали. Обратите внимание, что они являются байтами (python 3), поэтому вам может потребоваться преобразовать их в str
(зависит от вашей версии Python.
Смотрите: _mysql_connector.MySQL.convert_to_mysql () Метод
Старый ответ
Не создавайте запросы таким образом, вы можете открыть себя для SQL-инъекций и других проблем.
Используйте подготовленные заявления, пусть водитель сделает за вас цитаты, например:
stmt = "INSERT INTO names (name) VALUES (%s)"
name = "Some name' who cares"
cursor.execute(stmt, (name,))
Для получения дополнительной информации см.: Вставка данных с помощью Connector/Python