Подтвердить что ты не робот

Исключение строк с помощью python mysql.connector

Я пытаюсь вставить кучу строк в 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)"
4b9b3361

Ответ 1

Так как mysql.connector API API v2.0 совместим, вам не нужно самостоятельно удалять данные, он делает это автоматически для вас.

Ответ 2

Ответ от инфракрасного является лучшим подходом.

Но, если вам действительно нужно экранировать произвольную строку, вы можете сделать это (до 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')

Ответ 3

Действительно, лучший подход - позволить модулю экранировать значения самостоятельно. Если вам абсолютно необходимо сделать это вручную (например, я хочу печатать 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).