gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:45:43 24 4
gpt4 key购买 nike

我正在尝试创建一个从 Postgres 返回 JSON 数据的 Django View (即来自 Postgres 的数据已经是 JSON 类型)。

我在开发环境中使用 Django 开发服务器和 Postgres,在生产环境中使用 Apache 和 Postgres(不同的服务器)。

这个 View 在我的开发环境中运行良好:

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

到:

    return HttpResponse(json.dumps(cursor.fetchone()[0]), 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}]

使用 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”字符串。

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

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

[{"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 返回的是包含字符串列表的字典。

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

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

关于python - 使用 Django 从 Postgres 导出 JSON 时结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com