Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Как результат SQL запроса сериализовать в JSON [RSS Feed]

#1 Апрель 23, 2010 01:14:00

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

Как результат SQL запроса сериализовать в JSON

Пишу простое веб приложение которое будет выводить лог чата, новые сообщения хочу выводить на страницу через axaj. Не знаю как результат обращения в БД перевести в JSON формат. Использую web.py и sqlite базу.
Допустим:

import json
messages = db.query("SELECT * FROM GlobalChat ORDER BY rowid DESC LIMIT 25")
return ???



Офлайн

#2 Апрель 23, 2010 06:26:48

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

Как результат SQL запроса сериализовать в JSON

что-то типа того

return json.dumps(messages.fetchall())

Офлайн

#3 Апрель 23, 2010 12:54:55

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

Как результат SQL запроса сериализовать в JSON

o7412369815963
что-то типа того
return json.dumps(messages.fetchall())
Пока у меня с ошибкой вываливается, начну копать в эту сторону. fetchall() возвращает кортеж я так понял. Спасибо за наводку.



Офлайн

#4 Апрель 23, 2010 15:21:59

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

Как результат SQL запроса сериализовать в JSON

yurtaev
o7412369815963
что-то типа того
return json.dumps(messages.fetchall())
Пока у меня с ошибкой вываливается, начну копать в эту сторону. fetchall() возвращает кортеж я так понял. Спасибо за наводку.
исходник и ошибку в студию

Офлайн

#5 Апрель 23, 2010 16:08:52

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

Как результат SQL запроса сериализовать в JSON

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()



Офлайн

#6 Апрель 23, 2010 17:11:48

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

Как результат SQL запроса сериализовать в JSON

используйте simplejson, в плане кодировок он работает лучше, чем просто json.



Офлайн

#7 Апрель 23, 2010 17:33:34

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

Как результат SQL запроса сериализовать в JSON

axe
используйте simplejson, в плане кодировок он работает лучше, чем просто json.
А разве simplejson не стала в наборе стандартных библиотек под видом json? Вроде бы в 2.6 они слились… Могу быть не прав.



Офлайн

#8 Апрель 23, 2010 18:20:38

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

Как результат SQL запроса сериализовать в 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()
О библиотеке JSON



Офлайн

#9 Апрель 23, 2010 18:52:29

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

Как результат SQL запроса сериализовать в JSON

yurtaev
А разве simplejson не стала в наборе стандартных библиотек под видом json? Вроде бы в 2.6 они слились… Могу быть не прав.
Не слышал про это, но судя по коду похоже. Я живу на Python 2.5.



Офлайн

  • Начало
  • » Web
  • » Как результат SQL запроса сериализовать в JSON[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version