Ответ 1
Так как mysql.connector API API v2.0 совместим, вам не нужно самостоятельно удалять данные, он делает это автоматически для вас.
Я пытаюсь вставить кучу строк в mysql, используя python и mysql.connector. Мой текущий код выглядит примерно так:
db = mysql.connector.Connect('config blah blah')
cursor = db.cursor()
data = (somestring1, somestring2)
sql = "INSERT INTO mytable (col1, col2) VALUES ('%s', '%s')"
cursor.execute(sql, data)
Как мне избежать экранирования строк? Я мог бы попробовать сделать это на python, но я знаю, что это неправильный способ.
Примечание. Я понимаю, что mysql.connector все еще находится в разработке.
обновление:
Строка 4 должна читать:
sql = "INSERT INTO mytable (col1, col2) VALUES (%s, %s)"
Так как mysql.connector API API v2.0 совместим, вам не нужно самостоятельно удалять данные, он делает это автоматически для вас.
Ответ от инфракрасного является лучшим подходом.
Но, если вам действительно нужно экранировать произвольную строку, вы можете сделать это (до 2.1.6):
db = mysql.connector.connect(......)
new_str = db.converter.escape('string to be escaped')
Более новые версии (используйте низкоуровневый C-API):
db = mysql.connector.connect(......)
new_str = db._cmysql.escape_string('string to be escaped')
Действительно, лучший подход - позволить модулю экранировать значения самостоятельно. Если вам абсолютно необходимо сделать это вручную (например, я хочу печатать SQL только в режиме отладки скрипта, а mysql.connector
, по-видимому, не реализует mogrify()
), есть и другая опция:
>>>> import mysql.connector
>>>> cnx = mysql.connector.connect()
>>>> cur = cnx.cursor()
>>>> cur._connection.converter.escape("tic ' toc")
"tic \\' toc"
Следует признать, что он по-прежнему использует "непубличный API", но, по крайней мере, он не противоречит последним версиям (пока; тестируется на 2.0.4, 2.1.3, 2.2.9, 8.0.16).