2017-06-16 28 views
1

兩臺計算機在同一瀏覽器版本(chrome 58.0.3029.110(64位))上運行Flask 0.12.2版。計算機返回一個包含對象的列表是ubuntu 14.04,其中包含元組的是運行osx 10.11.6。瓶頸Jsonify返回一臺計算機上的對象列表和包含另一臺計算機上的元組的列表

這是傳遞到序列化的jsonify函數的數據的示例性數據 [( '代碼1',[ 'website1.com']),( '代碼2',[ 'website2.com'])]

osx機器瀏覽器控制檯的輸出是[[「Code1」,[「website1.com」]],[「Code2」,[「website2.com」]]]

vs [{「code」 :「Code1」,地點:[「website1.com」]},{「code」:「Code2」,地點:[「website2.com」]}]

編輯: 因此,重現的步驟是如下。使用表測試表創建一個test_db。

createdb test_db 

psql 

=# create table testtable (code1 text, code2 text); 

所需的兩個文件命名爲模型文件,test_model.py

from test_file import db 

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 

和test_file.py

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) 

import test_model 

@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 


#runs servlet, debug=true if you want to test running code 
if __name__ == "__main__": 
    app.run(host="0.0.0.0", debug=True) 

必要的點子庫psycopg2,燒瓶,燒瓶,SQLAlchemy的

當運行python test_file.py沒有simplejson安裝瀏覽器在localhost:5000 ou tputs

[ 
    [ 
    "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和燒瓶SQLAlchemy的可能之間的互動?只是發生在它使用燒瓶

+0

給定相同的輸入數據,這是不可能的。請[edit]包含[mcve]。您是否嘗試在兩臺機器上全新部署? – davidism

+0

目前正在研究一個例子,它已經在兩臺機器上都部署了新鮮。由於這是一個更大的項目,可能需要一點時間來重現相同的問題,但我正在努力。 – Bard117

+0

請仍然發佈[mcve]。如果你說的話其實是真的,那Flask中的一個*巨大的錯誤就是我們需要解決的。但我有點懷疑simplejson實際上是在返回一些不同的東西,我們永遠支持這個,沒有任何問題。 – davidism

回答

1

問題是在運行ubuntu的機器上安裝了simplejson python軟件包。它覆蓋了python json庫,導致它在調用jsonify時返回一個對象數組而不是數組數組。

相關問題