Например, в tornadio или tornado при асинхронном общении с клиентом - требуется как раз такое подключение к базе.
Поискав в интернете - нашел приложение по обращению к базе данных database через http-протокол
dbslayer. Там - посылаешь sql-запрос через http - получаешь ответ в виде json. Неудобство - этот самый json и неочевидность - как же его поставить.
Для django и python программистов Я решил сделать подобное dbslayer django-async-dbslayer - там пишем orm-запрос, посылаем его и ждем уже удобный ответ в виде serialize queryset.
Пример использования django-async-dbslayer
Например, нам требуется получить всех пользователей в игре.
class SomeController(object):
def games_game_info(self):
UserInGame.dbslayer.filter(
game__id=self.game.pk
).select_related('game', 'user').async(callback=self._send_game_info)
def _send_game_info(self, response):
objects = deserialize(response.body)
count_users = len(objects)
game = objects[0].game
members = [{
'user_id': obj.user.pk,
'name': obj.name,
'position': obj.position,
'turn': obj.turn,
'on_community': obj.on_community,
'passed': obj.passed,
'current_bet': obj.current_bet,
'online': obj.user.pk in [
s.user.pk for s in self.s.gamers.get(self.game.pk, [])
]
} for obj in objects]
game_info = {
'_view': 'games_game_info',
'count_users': count_users,
'state': game.state,
'current_trump': game.current_trump,
'members': members
}
self._send_all(game_info)
_send_all - посылает ответ браузеру (socket.io)
django-async-dbslayer умеет использовать почти все методы queryset (кроме aggregate и annotate). Также есть возможность посылать запросы пачками
Мой знакомый развил тему и намного улучшил - сделал систему tornado-slacker
Кодим потихоньку? А в Африке дети голодают!
ОтветитьУдалить