Форум сайта python.su
Пишу простое веб приложение которое будет выводить лог чата, новые сообщения хочу выводить на страницу через axaj. Не знаю как результат обращения в БД перевести в JSON формат. Использую web.py и sqlite базу.
Допустим:
import json
messages = db.query("SELECT * FROM GlobalChat ORDER BY rowid DESC LIMIT 25")
return ???
Офлайн
что-то типа того
return json.dumps(messages.fetchall())
Офлайн
o7412369815963Пока у меня с ошибкой вываливается, начну копать в эту сторону. fetchall() возвращает кортеж я так понял. Спасибо за наводку.
что-то типа тогоreturn json.dumps(messages.fetchall())
Офлайн
yurtaevисходник и ошибку в студиюo7412369815963Пока у меня с ошибкой вываливается, начну копать в эту сторону. fetchall() возвращает кортеж я так понял. Спасибо за наводку.
что-то типа тогоreturn json.dumps(messages.fetchall())
Офлайн
o7412369815963Проблема первая в том что web.py при работе с БД не дает метода fetchall(), ну да ладно можно и без неё обойтись. Вторая проблема уже не связана с fetchall(), все работает но выдает результат вида:
исходник и ошибку в студию
[["22:4:2010", "16:42:49", "bobon", " \u043f\u043e\u0447\u0435\u043c\u0443 \u043
a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0434\u0430\u044e \u0441\u0432\u043
e\u0438 \u0440\u0435\u043b\u0438\u0437\u044b \u043d\u0430 \u0442\u0440\u0435\u04
3a\u0435\u0440\u0430\u0445!!!!\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f
\u0435\u0440\u0432\u044b\u0435 5 \u0441\u0438\u0434\u043e\u0432 \u0434\u043e\u04
3a\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0438 \u0440\u0430\u0437\u0434\u04
30\u044e\u0442 \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u0435\u0
43d\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442???\u0442\u043e
\u0435\u0441\u0442\u044c \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e
\u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c"]]
import sqlite3 as db
c = db.connect(database="dbChat.sqlite")
cu = c.cursor()
cu.execute("SELECT * FROM GlobalChat ORDER BY rowid DESC LIMIT 1")
print json.dumps(cu.fetchall())
c.close()
Офлайн
используйте simplejson, в плане кодировок он работает лучше, чем просто json.
Офлайн
axeА разве simplejson не стала в наборе стандартных библиотек под видом json? Вроде бы в 2.6 они слились… Могу быть не прав.
используйте simplejson, в плане кодировок он работает лучше, чем просто json.
Офлайн
Решил проблему с кодировкой, необходимо задать параметр ensure_ascii=False Пример:
import json
import sqlite3 as db
c = db.connect(database="dbChat.sqlite")
cu = c.cursor()
cu.execute("SELECT * FROM GlobalChat ORDER BY rowid DESC LIMIT 5")
print json.dumps(cu.fetchall(),ensure_ascii=False)
c.close()
Офлайн
yurtaevНе слышал про это, но судя по коду похоже. Я живу на Python 2.5.
А разве simplejson не стала в наборе стандартных библиотек под видом json? Вроде бы в 2.6 они слились… Могу быть не прав.
Офлайн