Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2014 18:16:17

Strelok-den
Зарегистрирован: 2014-03-25
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

Есть код что снизу, все другие sql запросы отрабатывают нормально, зам запрос правильный(проверял в май админ) но при запуске выскакивает ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1473, in __call__
    return self.func(*args)
  File "/home/den/myprojects/pochta/pochta/__init__.py", line 205, in start4
    cursor.execute(sql)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 176, in execute
    if not self._defer_warnings: self._warning_check()
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 92, in _warning_check
    warn(w[-1], self.Warning, 3)
  File "/usr/lib/python2.7/warnings.py", line 29, in _show_warning
    file.write(formatwarning(message, category, filename, lineno, line))
  File "/usr/lib/python2.7/warnings.py", line 38, in formatwarning
    s =  "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

Пробывал разные encode, язык русский стоит везде Utf-8, # -*- coding: utf-8 -*- тоже имеется…
В чем же проблема?(

def start4(event):
  global poisk3
  poisk3=entry_tip.get()
  poisk3=poisk3.encode('utf-8')
  root4.destroy()
  # запрос к БД
  sql = """SELECT id_tip, id_otd, name FROM tipografia, otdelenia
WHERE tipografia.id_tip = otdelenia.id_otd AND tipografia.adres = otdelenia.name LIKE '%s' LIMIT 1""" %poisk3
  # выполняем запрос
  cursor.execute(sql)
  # получаем результат выполнения запроса
  data =  cursor.fetchall()
  # перебираем записи
  for rec in data: 
  # извлекаем данные из записей - в том же порядке, как и в SQL-запросе
      name = rec
      # выводим информацию
      #print adres
  # закрываем соединение с БД
  root = Tk()
  root.geometry('300x100')
  root.title("По адресу")
  frame_tip1 = Frame(root)
  frame_tip1.grid()
  Label_tip1 = Label(frame_tip1, width=40, height=6, text=name)
  Label_tip1.grid(row=1, column=1)
  db.close()

Офлайн

#2 Март 30, 2014 18:55:20

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)


А так?

sql = u"""SELECT id_tip, id_otd, name FROM tipografia, otdelenia
WHERE tipografia.id_tip = otdelenia.id_otd AND tipografia.adres = otdelenia.name LIKE '%s' LIMIT 1""" %poisk3

Офлайн

#3 Март 30, 2014 21:39:06

Strelok-den
Зарегистрирован: 2014-03-25
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

Alen
Теперь так:

File "/home/den/myprojects/pochta/pochta/__init__.py", line 203, in start4
    WHERE tipografia.id_tip = otdelenia.id_otd AND tipografia.adres = otdelenia.name LIKE '%s' LIMIT 1""" %poisk3
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

Офлайн

#4 Март 30, 2014 22:12:40

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

1. Не обязательно хардкорить SQL. Можно попробовать нормальный ORM (лучший пока SQLAlchemy). Будет легче, проще и качественнее.
2. Убивать базовое окно не рекомендуется. Лучше упаковывать все виджеты в рамку и ее удалять или лучше скрывать.
3. Делать

from tkinter import *

Нельзя!!! Глянуть рекомендую тут.

4. Ну и global вообще не есть гуд

P.S. Будут вопросы - пишите…

Отредактировано 4kpt_II (Март 30, 2014 22:15:24)

Офлайн

#5 Март 30, 2014 22:18:37

Strelok-den
Зарегистрирован: 2014-03-25
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

4kpt_II
1. Мне надо базу в mysql хранить а как вызывать не суть…
2. Ок спс, это так временные наброски…
3. Почему нельзя? я брал на сайте пример просто там так было) а как лучше?
4. А что есть гуд?)
5. А по теме идеи есть?)

Офлайн

#6 Март 30, 2014 22:22:02

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

3. Я же дал ссылку почему нельзя. Лень почитать?
4. Делать все в виде классов. Тогда в global не будет необходимости в принципе. Почему не есть гуд Вам поможет разобраться знакомство с работой “сборщика мусора”.
5. Есть. Сделать все с использованием SQLAlcemy и переложить все эти проблемы на ее плечи

P.S. Будут вопросы - пишите…

P.S.S. Кстати. Забыл сказать. У SQLAlchemy порог вхождения выше, чем у Django ORM, если с ней не пойдет, то можно использовать второе решение.

Отредактировано 4kpt_II (Март 30, 2014 22:24:42)

Офлайн

#7 Март 30, 2014 22:28:50

Strelok-den
Зарегистрирован: 2014-03-25
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

4kpt_II
3. Сори не обновил страницу, не заметил ок почитаю спс)
4. С классами не разобрался… как то…
5. SQLAlcemy сможет выводить список или таблицу данных? а то моим методом могу только одну строчку…

ОК)

P.S думаю будут)

Офлайн

#8 Март 30, 2014 22:34:30

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

SQLAlchemy может все Ну. Практически все.
А учитывая пока не очень высокие Ваши требования - то реально все

P.S. Будут вопросы - пишите…

Отредактировано 4kpt_II (Март 30, 2014 23:00:03)

Офлайн

#9 Апрель 1, 2014 01:35:19

Strelok-den
Зарегистрирован: 2014-03-25
Сообщения: 63
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

4kpt_II
Не знаю куда писать поэтому пишу тут…
После правки кода под классы, окна что в классах выводятся на задний план в чем проблема? Код если надо вышлю) Спасибо)

Офлайн

#10 Апрель 1, 2014 11:19:59

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)

Напишите в раздел GUI.
Заодно и код сразу приложите

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version