Найти - Пользователи
Полная версия: Кодировка для запросов в БД
Начало » Python для новичков » Кодировка для запросов в БД
1 2 3 4
KarDer_Groom
Lexander
Добавил use_unicode=True и charset='utf8' на это после выполнения получаю:
dbsql.py:14: Warning: Incorrect string value: ‘\xCF\xF0\xE8\xE2\xE5\xD2…’ for column ‘name’ at row 1
c.execute(sql)
dbsql.py:14: Warning: Incorrect string value: ‘\xD0\xF3\xF1\xF1’ for column ‘name’ at row 1
c.execute(sql)
При этом строки латиницей снова удалились, а русские так и сидят.

Ну я так понимаю с БД всё нормально, но проблема тока в этой строке: tags= именно эти элементы списка не могут в utf8 трансформироваться.

Так может эту строку например содержать в файле и от туда считывать от запятой и до запятой, или просто каждое словосочетание с новой строки, главный вопрос поможет ли это? Станет ли легче программно со строками БД сравнивать? Может ещё какой вариант?
Всё равно это не итоговый вид программы, это только один элемент, но из-за этого я не могу двигаться далее.
Lexander
tags=
KarDer_Groom
KarDer_Groom
Так я пробовал: u'слово русское' - не помогло
Lexander
Я в первом сообщении писал что так я уже пробовал, именно на этой строчке ошибка выскакивает -> SyntaxError: (unicode error) invalid data

Нашёл пост на форуме, очень похожий на мой, но тоже не могу его под себя переделать. http://python.su/forum/viewtopic.php?id=550&p=1
pioner
KarDer_Groom
for num in range(len(tags)):
sql=“DELETE FROM tabl WHERE name='%s'” % tag()
c.execute(sql)
db.commit()
for i, n in c.fetchall():
tags - глобальная переменная.
у вас цикл идет по длинне, которая уменьшается (pop). уверены что в питоне так работает? я не уверен. и так не делаю, но любопытно.
… c.fetchall() зачем? “delete” не возвращает ничего.

KarDer_Groom
\xD0\xF3\xF1\xF1'
это строки в уникоде…и ваша база на них ругается…странно-строки, они и в африке - строки.
KarDer_Groom
При этом строки латиницей снова удалились
а пишите вы в базу как? …если удаляете неоднократно, то как пишите? какой код?
KarDer_Groom
pioner
tags - глобальная переменная.
у вас цикл идет по длинне, которая уменьшается (pop). уверены что в питоне так работает? я не уверен. и так не делаю, но любопытно.
… c.fetchall() зачем? “delete” не возвращает ничего.
Я конечно новичёк в этом языке, но у меня получается через (pop) удалять, в Инэти нашел (http://ru.diveintopython.org/odbchelper_list.html) и во втором сообщении o7412369815963 подсказал проще способ, без функции.
c.fetchall() - Вы правы, взял с примера, прочитал зачем, но не подумал что в моём случае бесполезен. Спасибо.

pioner
это строки в уникоде…и ваша база на них ругается…странно-строки, они и в африке - строки.
Не совсем понял. В tags записываю русские слова, но указываю ведь в начале что пишу в UTF-8, в коде. База данных вся в utf8 следовательно просто сравниваю и при совпадении удаляю. С английскими словами прокатывает, но русские пропускает (получается просто не находит соответствия в БД, командой pop удаляет словосочетание и идёт дальше). Логика вроде верная, но видимо где-то всё таки кодировка портится.

pioner
а пишите вы в базу как? …если удаляете неоднократно, то как пишите? какой код?
Извините, тоже не совсем вопрос понял, отвечаю как понял: после выполнения у меня удаляются все строки с символами и англ. словами, русские остаются, так как смотрю БД MySQL Querty Browser, для следующего опыта я просто выполняю скрипт (в той же проге):
INSERT INTO `my_db` (`id`,`name`) VALUES
(7660,'2008'),
(7661,'home'),
(7662,'###@@@'),
(7663,'2');
и таблица готова к новым тестам. Русские не закидываю, так как они не удалились.
pioner
KarDer_Groom
и таблица готова к новым тестам. Русские не закидываю, так как они не удалились.
Запишите так же русские, потом попробуйте удалить…думаю все прояснится. Вы уже видите причину, надо ее расковырять до конца.
KarDer_Groom
pioner
Расковырял )))))) до конца, пошёл от обратного, рас у меня в переменной такое: “\xD0\xF3\xF1\xF1” то это нада в русские буквы перевести, перевёл так:
sql="DELETE FROM tabl WHERE name='%s'" % tag().decode('cp1251')
Всё заработало. Теперь все строки удаляются. Проблема изучена, но не совсем понята.
Получается хоть вся БД и таблицы в utf8 но данные в cp1251. А я всё пытался данные в utf переделать.

Нда, надо мне ещё поизучать кодировки.
Всем спасибо
o7412369815963
KarDer_Groom
pioner
sql="DELETE FROM tabl WHERE name='%s'" % tag().decode('cp1251')
данной командой происходит преобразование строки cp1251 в уникод, если так работает, то скорее всего в tag кодировка ср1251 и наверно весь исходник в этой же кодировке, в блокноте пишите код?
KarDer_Groom
o7412369815963
весь исходник в этой же кодировке, в блокноте пишите код?
Ну создал .py файл, и там пишу код через Notepad++, собственно да.
regall
KarDer_Groom
Ну создал .py файл, и там пишу код через Notepad++, собственно да.
В Notepad++, как собственно и в любом другом текстовом редакторе есть возможность задать кодировку файла, или сохранить файл в конкретной кодировке, полазьте по менюшкам, посмотрите.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB