Flask Jsonify返回一台计算机上的对象列表和另一台计算机上包含元组的列表

2024-05-15 10:57:10 发布

您现在位置:Python中文网/ 问答频道 /正文

两台计算机都运行Flask版本0.12.2,在同一个浏览器版本(chrome 58.0.3029.110(64位))。在

以下是传递到jsonify函数序列化数据的数据示例:

[('Code1', ['website1.com']), ('Code2', ['website2.com'])]

未安装simplejson的机器的输出为:

^{pr2}$

与安装simplejson时相比:

[{"code":"Code1",place:["website1.com"]},{"code":"Code2",place:["website2.com"]}]
from flask import jsonify, Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://localhost:5432/test_db'
db = SQLAlchemy(app)

class myModel(db.Model):
    __tablename__ = 'testtable'

    code1 = db.Column(db.Text, primary_key=True)
    code2 = db.Column(db.Text)
    def __init__(self, co1, co2):
        self.code1 = co1
        self.code2 = co2

@app.route("/")
def b():
    a = [('Code1', ['website1.com']), ('Code2', ['website2.com'])]
    myModel = test_model.myModel("website1.com", "website2.com")
    myModel = test_model.myModel("website3.com", "website4.com")
    db.session.add(myModel)
    db.session.commit()
    query = test_model.myModel.query.with_entities(test_model.myModel.code1).all()
    print("my model", query, type(query))
    foo = jsonify(query)
    print(foo)
    return foo

if __name__ == "__main__":
    app.run(debug=True)

在没有安装simplejson的情况下运行python test_file.py时,输出是

[
  [
    "website3.com"
  ], 
  [
    "website3.com"
  ], 
  [
    "website3.com"
  ], 
  [
    "website3.com"
  ], 
  [
    "website3.com"
  ], 
  [
    "website3.com"
  ]
]

在安装了simplejson的情况下运行时,输出是

[
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }, 
  {
    "code1": "website3.com"
  }
]

总之,这可能是关于simplejson和flask sqlalchemy之间的交互作用吧?刚用烧瓶碰到它


Tags: testcomappflaskdbmodelquerymymodel
1条回答
网友
1楼 · 发布于 2024-05-15 10:57:10

问题是在运行ubuntu的机器上安装了simplejson python包。它重写pythonjson库,导致它返回一个对象数组,而不是调用jsonify时预期的数组数组。在

相关问题 更多 >