Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2016 16:59:17

http8800
Зарегистрирован: 2016-04-12
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

mysql экранирование unicode

Друзья, стыдно спрашивать, но не могу разобраться.

python —version
Python 2.6.6

# -*- coding: utf-8 -*-
import MySQLdb
...
>>> print(py_value)
Какой'то текст
>>> print(type(py_value))
<type 'unicode'>
sql = '''insert into tablename(db_id, db_value)
values ('%(db_id)s', '%(db_value)s')
'''%{'db_id':py_id, db_value':py_value}
cursor.execute(sql)
db.commit()

Добавляю значение в БД и получаю ошибку: “_mysql_exceptions.ProgrammingError: (1064, ”You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near…“)

Тут всё понятно - виной всему кавычка в py_value.

Вопрос в том как экранировать её. Строку нужно сохранить в первозданном виде.

MySQLdb.escape_string(py_value) выдаёт ошибку:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 14-15: ordinal not in range(128)

Что делать? Менять кавычки на ” “ в запросе бессмысленно, ведь как только в py_value попадётся ” - всё опять сломается

Отредактировано http8800 (Апрель 12, 2016 16:59:44)

Офлайн

#2 Апрель 12, 2016 18:38:13

Apxumekmop
Зарегистрирован: 2016-03-30
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

mysql экранирование unicode

Попробуй

r"текст с кавычками"

Офлайн

#3 Апрель 13, 2016 12:59:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

mysql экранирование unicode

Уже много-много раз спрашивали



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version