Форум сайта python.su
0
Доброго времени. Без длинных предисловий, я полный нюб
не судите строго.
Вопрос в следующем, есть таблица в sqlite3, пытаюсь получить из неё выборку в Tkinter Text widget. Выборку получаю, но в одну строку, вместо:
ROW1
ROW2
ROW3
получаю ROW1ROW2ROW3
вот код:
#!/usr/bin/env python from Tkinter import * import sqlite3 conn = sqlite3.connect('test.db') cs = conn.cursor() rows = cs.execute('SELECT COMMENT,COMMAND,TAG FROM history') root = Tk() t = Text(root) t.pack() for row in rows: t.insert(END, row[0]) t.insert(END, row[1]) t.insert(END, row[2]) #print row[0] #print row[1] #print row[2] root.mainloop()
Офлайн
39
А если попробовать так?
t.insert(END, "\n".join(rows))
for row in rows: t.insert(END, row[0]) t.insert(END, row[1]) t.insert(END, row[2])
Отредактировано 4kpt_III (Янв. 6, 2016 14:00:56)
Офлайн
0
Ругнулось на несоотв. типов данных:
t.insert(END, "\n".join(rows)) TypeError: sequence item 0: expected string, tuple found
Офлайн
39
Пропринтуйте rows и все будет понятно 
Офлайн
0
4kpt_IIIС Рождеством господа!
Пропринтуйте rows и все будет понятно
while True: rows = cur.fetchone() if rows == None: break t.insert(END, rows[0]) t.insert(END, rows[1]) t.insert(END, rows[2])
Отредактировано quantum_85 (Янв. 7, 2016 12:49:57)
Офлайн
39
quantum_85
Помогу. Когда увижу результат команды
print(rows)
Офлайн
0
4kpt_IIIэто кортеж в юникоде:
quantum_85Помогу. Когда увижу результат команды
Офлайн
39
А обманывать не хорошо 
Если бы в rows были бы только строки, то строка
t.insert(END, "\n".join(rows))
rows = (u'print column', u'awk {print $1}', u'awk') print(u"\n".join(rows))
print column
awk {print $1}
awk
rows = ((u'print column', u'awk {print $1}', u'awk'),) print(u"\n".join(rows))
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: sequence item 0: expected str instance, tuple found
t.insert(END, u"\n".join(u" ".join(rows)))
Отредактировано 4kpt_III (Янв. 8, 2016 00:51:19)
Офлайн
0
Уважаемый 4kpt_III, Спасибо что потратили свое время!
Я все же не вижу где у меня тут вложенность, вот полный вывод принт, в тестовой таблице только пара строк
cs.execute('SELECT COMMENT,COMMAND,TAG FROM history') rows = cs.fetchall() print(rows) [(u'replace value', u'sed s|old|new|g', u'sed'), (u'print column', u'awk {print $1}', u'awk')]
Теперь все красиво! ))
, т.к. до меня так и не дошло , почему print и widget.insert() работают по разному и я не смог комфортно работать с кортежем.t.insert(END, u"\n".join(u" ".join(rows))) TypeError: sequence item 0: expected string or Unicode, tuple found
Отредактировано quantum_85 (Янв. 8, 2016 09:57:41)
Офлайн