Форум сайта python.su
0
Есть код что снизу, все другие 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)
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()
Офлайн
49
А так?
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
Офлайн
0
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)
Офлайн
58
1. Не обязательно хардкорить SQL. Можно попробовать нормальный ORM (лучший пока SQLAlchemy). Будет легче, проще и качественнее.
2. Убивать базовое окно не рекомендуется. Лучше упаковывать все виджеты в рамку и ее удалять или лучше скрывать.
3. Делать
from tkinter import *

Отредактировано 4kpt_II (Март 30, 2014 22:15:24)
Офлайн
0
4kpt_II
1. Мне надо базу в mysql хранить а как вызывать не суть…
2. Ок спс, это так временные наброски…
3. Почему нельзя? я брал на сайте пример просто там так было) а как лучше?
4. А что есть гуд?)
5. А по теме идеи есть?)
Офлайн
58
3. Я же дал ссылку почему нельзя. Лень почитать?
4. Делать все в виде классов. Тогда в global не будет необходимости в принципе. Почему не есть гуд Вам поможет разобраться знакомство с работой “сборщика мусора”.
5. Есть. Сделать все с использованием SQLAlcemy и переложить все эти проблемы на ее плечи 
P.S. Будут вопросы - пишите…
P.S.S. Кстати. Забыл сказать. У SQLAlchemy порог вхождения выше, чем у Django ORM, если с ней не пойдет, то можно использовать второе решение.
Отредактировано 4kpt_II (Март 30, 2014 22:24:42)
Офлайн
0
4kpt_II
3. Сори не обновил страницу, не заметил ок почитаю спс)
4. С классами не разобрался… как то…
5. SQLAlcemy сможет выводить список или таблицу данных? а то моим методом могу только одну строчку…
ОК)
P.S думаю будут)
Офлайн
58
SQLAlchemy может все
Ну. Практически все.
А учитывая пока не очень высокие Ваши требования - то реально все 
P.S. Будут вопросы - пишите…
Отредактировано 4kpt_II (Март 30, 2014 23:00:03)
Офлайн
0
4kpt_II
Не знаю куда писать поэтому пишу тут…
После правки кода под классы, окна что в классах выводятся на задний план в чем проблема? Код если надо вышлю) Спасибо)
Офлайн
58
Напишите в раздел GUI.
Заодно и код сразу приложите 
Офлайн