2014-11-04 2 views
1

Я пытаюсь сериализации SQL запрос JSON:Как сериализовать sql-запрос для json?

cursor.execute("""SELECT b.tonode, n.name, b.fromnode FROM zusers u JOIN znode n 
                ON u.code = n.created_by 
               JOIN zbond b 
                ON b.code = n.code 
               WHERE u.userid = %s""", [user_id]) 

data = serializers.serialize('json', rows, fields = ('id', 'name', 'parent')) 

Но это не работает. Можно ли сериализовать не объекты модели, а sql-запрос?

+0

возникла ли какая-либо ошибка? –

+0

'tuple' объект не имеет атрибута '_meta' – andriy

+0

проверить мое редактирование, чтобы найти причину ошибки. вы должны преобразовать свой результат в объект моделей django и передать его в serializer. –

ответ

1

баз на doc:

На самом деле, второй аргумент может быть любым итератор, который дает экземпляры модели Django, но это почти всегда будет QuerySet

попробовать это:

query = """SELECT b.tonode, n.name, b.fromnode FROM zusers u JOIN znode n 
                ON u.code = n.created_by 
               JOIN zbond b 
                ON b.code = n.code 
               WHERE u.userid = %s"""%user_id 

data = serializers.serialize('json', YourModel.objects.raw(query), fields=('id', 'name', 'parent')) 
+0

Не знаю, какую модель я должен использовать insead от «YourModel». Мне нужно просто сериализовать этот список строк. – andriy

+0

Строковое форматирование по SQL-запросам - это не очень хорошая идея. https://docs.djangoproject.com/en/1.8/topics/db/sql/#passing-parameters-into-raw – allanberry

1

попробуйте этот код:

cursor = connection.cursor() 
cursor.execute("""SELECT b.tonode, n.name, b.fromnode FROM zusers u JOIN znode n ON u.code = n.created_by JOIN zbond b ON b.code = n.code WHERE u.userid = %s""", [user_id]) 
rows = cursor.fetchall() 
result = [] 
keys = ('id','name','parent',) 
for row in rows: 
    result.append(dict(zip(keys,row))) 
json_data = json.dumps(result) 
return HttpResponse(json_data, content_type="application/json")