Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2009 16:59:55

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

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 трансформироваться.

Так может эту строку например содержать в файле и от туда считывать от запятой и до запятой, или просто каждое словосочетание с новой строки, главный вопрос поможет ли это? Станет ли легче программно со строками БД сравнивать? Может ещё какой вариант?
Всё равно это не итоговый вид программы, это только один элемент, но из-за этого я не могу двигаться далее.



Офлайн

#2 Ноя. 17, 2009 17:40:25

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

tags=



Офлайн

#3 Ноя. 17, 2009 17:49:17

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

KarDer_Groom
Так я пробовал: u'слово русское' - не помогло
Lexander
Я в первом сообщении писал что так я уже пробовал, именно на этой строчке ошибка выскакивает -> SyntaxError: (unicode error) invalid data

Нашёл пост на форуме, очень похожий на мой, но тоже не могу его под себя переделать. http://python.su/forum/viewtopic.php?id=550&p=1



Офлайн

#4 Ноя. 17, 2009 18:03:16

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

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
При этом строки латиницей снова удалились
а пишите вы в базу как? …если удаляете неоднократно, то как пишите? какой код?



Офлайн

#5 Ноя. 18, 2009 11:45:15

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

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');
и таблица готова к новым тестам. Русские не закидываю, так как они не удалились.



Офлайн

#6 Ноя. 18, 2009 13:23:51

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

KarDer_Groom
и таблица готова к новым тестам. Русские не закидываю, так как они не удалились.
Запишите так же русские, потом попробуйте удалить…думаю все прояснится. Вы уже видите причину, надо ее расковырять до конца.



Офлайн

#7 Ноя. 18, 2009 13:59:58

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

pioner
Расковырял )))))) до конца, пошёл от обратного, рас у меня в переменной такое: “\xD0\xF3\xF1\xF1” то это нада в русские буквы перевести, перевёл так:

sql="DELETE FROM tabl WHERE name='%s'" % tag().decode('cp1251')
Всё заработало. Теперь все строки удаляются. Проблема изучена, но не совсем понята.
Получается хоть вся БД и таблицы в utf8 но данные в cp1251. А я всё пытался данные в utf переделать.

Нда, надо мне ещё поизучать кодировки.
Всем спасибо



Отредактировано (Ноя. 18, 2009 14:00:49)

Офлайн

#8 Ноя. 18, 2009 15:36:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

KarDer_Groom
pioner
sql="DELETE FROM tabl WHERE name='%s'" % tag().decode('cp1251')
данной командой происходит преобразование строки cp1251 в уникод, если так работает, то скорее всего в tag кодировка ср1251 и наверно весь исходник в этой же кодировке, в блокноте пишите код?

Офлайн

#9 Ноя. 18, 2009 16:34:20

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

o7412369815963
весь исходник в этой же кодировке, в блокноте пишите код?
Ну создал .py файл, и там пишу код через Notepad++, собственно да.



Офлайн

#10 Ноя. 18, 2009 16:45:19

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Кодировка для запросов в БД

KarDer_Groom
Ну создал .py файл, и там пишу код через Notepad++, собственно да.
В Notepad++, как собственно и в любом другом текстовом редакторе есть возможность задать кодировку файла, или сохранить файл в конкретной кодировке, полазьте по менюшкам, посмотрите.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version