Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django从Postgres导出JSON时结果不一致_Python_Json_Django_Postgresql - Fatal编程技术网

Python 使用Django从Postgres导出JSON时结果不一致

Python 使用Django从Postgres导出JSON时结果不一致,python,json,django,postgresql,Python,Json,Django,Postgresql,我试图创建一个Django视图,该视图返回来自Postgres的JSON数据(即来自Postgres的数据已经是JSON类型) 我在开发环境中使用Django-dev服务器和Postgres,在生产环境中使用Apache和Postgres(另一种服务器) 此视图在我的开发环境中运行良好: def my_custom_sql(request): cursor = connection.cursor() cursor.execute("... the query ...")

我试图创建一个Django视图,该视图返回来自Postgres的JSON数据(即来自Postgres的数据已经是JSON类型)

我在开发环境中使用Django-dev服务器和Postgres,在生产环境中使用Apache和Postgres(另一种服务器)

此视图在我的开发环境中运行良好:

def my_custom_sql(request):
    cursor = connection.cursor()
    cursor.execute("... the query ...")
    return HttpResponse(cursor.fetchone(), mimetype="application/json")
但在我的生产环境中,输出是不同的

为了在生产中发挥作用,我将第四行从:

    return HttpResponse(cursor.fetchone(), mimetype="application/json")
致:

以下是结果(我添加了行返回):

开发环境:

使用
cursor.fetchone()
-正确

[{"date":"2014-06-12","count":3,"sum":3}, 
 {"date":"2014-06-13","count":null,"sum":3}, 
 {"date":"2014-06-14","count":null,"sum":3}, 
 {"date":"2014-06-15","count":null,"sum":3}, 
 {"date":"2014-06-16","count":null,"sum":3}, 
 {"date":"2014-06-17","count":null,"sum":3}]
[{"date": "2014-06-11", "count": 4, "sum": 4},
{"date": "2014-06-12", "count": 8, "sum": 12},
{"date": "2014-06-13", "count": 7, "sum": 19},
{"date": "2014-06-14", "count": 6, "sum": 25},
{"date": "2014-06-15", "count": 1, "sum": 26},
{"date": "2014-06-16", "count": 9, "sum": 35},
{"date": "2014-06-17", "count": 4, "sum": 39}]
使用
json.dumps(cursor.fetchone()[0])
-不正确:不是真正的json

"[{\"date\":\"2014-06-12\",\"count\":3,\"sum\":3}, \n
{\"date\":\"2014-06-13\",\"count\":null,\"sum\":3}, \n
{\"date\":\"2014-06-14\",\"count\":null,\"sum\":3}, \n
{\"date\":\"2014-06-15\",\"count\":null,\"sum\":3}, \n
{\"date\":\"2014-06-16\",\"count\":null,\"sum\":3}, \n
{\"date\":\"2014-06-17\",\"count\":null,\"sum\":3}]"
生产环境:(不同的数据,忽略该数据)

使用
cursor.fetchone()
-不正确:请注意python的“u”字符串

使用
json.dumps(cursor.fetchone()[0])
-正确

[{"date":"2014-06-12","count":3,"sum":3}, 
 {"date":"2014-06-13","count":null,"sum":3}, 
 {"date":"2014-06-14","count":null,"sum":3}, 
 {"date":"2014-06-15","count":null,"sum":3}, 
 {"date":"2014-06-16","count":null,"sum":3}, 
 {"date":"2014-06-17","count":null,"sum":3}]
[{"date": "2014-06-11", "count": 4, "sum": 4},
{"date": "2014-06-12", "count": 8, "sum": 12},
{"date": "2014-06-13", "count": 7, "sum": 19},
{"date": "2014-06-14", "count": 6, "sum": 25},
{"date": "2014-06-15", "count": 1, "sum": 26},
{"date": "2014-06-16", "count": 9, "sum": 35},
{"date": "2014-06-17", "count": 4, "sum": 39}]

如何在生产和开发环境中获得相同的结果?

我也遇到过类似的情况。我的sql正在返回json。在我的开发环境中,Django正在将json转换为包含列表的字典,但在生产环境中,Django正在返回包含字符串列表的字典

我遇到的问题是不同版本的。我在开发中运行2.5,但在生产中运行2.4


检查所有软件包,确保您的开发环境与生产环境相同。

在您的开发环境中,它看起来像是
游标。fetchone()[0]
返回
文本
str
),这就是它没有正确序列化为JSON的原因。在生产环境中时,cursor.fetchone()[0]
正在返回
json
dict
)。