1

我正在尝试将 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 查询?

4

4 回答 4

2

基于文档

实际上,第二个参数可以是任何产生 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'))
于 2014-11-04T21:43:11.157 回答
2

试试这个代码:

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")
于 2016-07-16T20:05:44.820 回答
0
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")
于 2019-11-21T07:29:25.820 回答
0

试试这个代码

    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])
    cursor.fetchall()
    json_data = dictfetchall(cursor)
    return HttpResponse(json_data, content_type="application/json")

def dictfetchall(cursor):
    "Return all rows from a cursor as a dict"
     columns = [col[0] for col in cursor.description]
     return [
         dict(zip(columns, row))
         for row in cursor.fetchall()
     ]
于 2019-11-21T07:08:11.253 回答